Pular para o conteúdo

Criando um novo módulo

Vamos criar um novo módulo.

Crie um novo diretório vazio em qualquer lugar do seu sistema de arquivos (desde Go 1.16, não é mais necessário se preocupar com $GOPATH), vá até esse diretório e, em seguida, crie um novo arquivo, hello.go:

package hello
func Hello() string {
return "Hello, world."
}

Vamos escrever um teste também em hello_test.go:

package hello
import "testing"
func TestHello(t *testing.T) {
want := "Hello, world."
if got := Hello(); got != want {
t.Errorf("Hello() = %q, want %q", got, want)
}
}

Neste ponto, o diretório contém um pacote, mas não um módulo, porque não há um arquivo go.mod.

Se estivéssemos trabalhando em /home/gopher/hello e executássemos o teste sem um go.mod, veríamos um erro solicitando que você execute go mod init primeiro.

Vamos tornar o diretório atual a raiz de um módulo usando go mod init e, em seguida, tente go test novamente:

$ go mod init example.com/hello
go: creating new go.mod: module example.com/hello
$ go test
PASS
ok example.com/hello 0.020s
$

Executando o exemplo com Go 1.27.1, o comando go mod init escreveu um arquivo go.mod:

$ cat go.mod
module example.com/hello
go 1.27.1
$

No Go 1.27, essa linha começa com a versão do toolchain que executou go mod init, incluindo o patch. Se você precisa atender uma versão anterior, pode ajustar o requisito com go get go@1.26.0 e testar com essa versão. O código e as dependências também precisam ser compatíveis com ela.

As notas do Go 1.26.0 descrevem um padrão diferente, que escolhia uma versão anterior. Essa mudança foi revertida no Go 1.26.1 e no Go 1.27. Veja os detalhes no histórico dessas versões.