Создайте новый пустой каталог где-нибудь за пределами $GOPATH/src, перейдите в этот каталог, а затем создайте новый исходный файл hello.go:
package hello
func Hello() string {
return "Hello, world."
}
Также напишем тест в 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)
}
}
На данный момент каталог содержит пакет, но не модуль, потому что нет файла go.mod. Если бы мы работали в /home/gopher/hello и запускали go test сейчас, мы бы увидели:
$ go test
PASS
ok _/home/gopher/hello 0.020s
$
Последняя строка суммирует общий пакетный тест. Поскольку мы работаем за пределами $GOPATH, а также за пределами любого модуля, команда go не знает пути импорта для текущего каталога и создает поддельный путь на основе имени каталога: _/home/gopher/hello.
Сделаем текущий каталог корневым модулем с помощью go mod init, а затем снова попробуем go test:
$ go mod init example.com/hello
go: creating new go.mod: module example.com/hello
$ go test
PASS
ok example.com/hello 0.020s
$
Вы написали и протестировали свой первый модуль.
Команда go mod init записала файл go.mod:
$ cat go.mod
module example.com/hello
go 1.12
$
Файл go.mod отображается только в корне модуля. Пакеты в подкаталогах имеют пути импорта, состоящие из пути модуля плюс путь к подкаталогу. Например, если бы мы создали подкаталог world, нам не нужно было бы запускать go mod init там. Пакет автоматически распознается как часть модуля example.com/hello с указанием пути импорта example.com/hello/world.
Читайте также:
Комментариев нет:
Отправить комментарий