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/hellogo: creating new go.mod: module example.com/hello$ go testPASSok 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.modmodule 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.