понедельник, 24 июня 2019 г.

Go модули: создание нового модуля

Создайте новый пустой каталог где-нибудь за пределами $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.


Читайте также:


Комментариев нет:

Отправить комментарий