Голанг: Как использовать VGO? ошибка: "не могу найти пакет"
У меня есть проект, который в настоящее время находится под моей GOPATH
/usr/local/go/src/
Затем я зашел в корень своего проекта и запустил:
go get -u golang.org/x/vgo
В моем main.go я хочу использовать lib httprouter, поэтому я добавил в оператор импорта:
import ( "github.com/julienschmidt/httprouter" )
Я побежал
vgo build
- Затем, когда я запускаю свой сервер как обычно, я получаю следующую ошибку:
main.go:8:2: cannot find package "github.com/julienschmidt/httprouter" in any of:
/usr/local/go/src/github.com/julienschmidt/httprouter (from $GOROOT)
/Users/myuser/go/src/github.com/julienschmidt/httprouter (from $GOPATH)
Я понимаю ошибку, похоже, что поиск httprouter под GOPATH или GOROOT. Так что мне нужно делать что-то еще, чтобы позволить vgo делать свое дело, и я могу успешно запустить свой сервер?
1 ответ
С помощью vgo build
Вот краткий обзор использования Hello, World vgo
В том числе распространенные ошибки и способы их устранения.
$ go get -u golang.org/x/vgo
$ cd /tmp/hello # Outside of GOPATH.
$ cat main.go
package main import "fmt" func main() { fmt.Println("Hello, World") }
$ vgo build
cannot determine module root; please create a go.mod file there
Эта ошибка говорит нам о том, что нам нужно указать корень нашего модуля vgo. Модуль представляет собой набор пакетов (возможно, один) версий вместе. Создать пустой
go.mod
файл для обозначения это корень модуля:$ touch go.mod
Попробуйте построить снова:
$ vgo build
,vgo: cannot determine module path for source directory /tmp/hello (outside GOPATH, no import comments)
Эта ошибка говорит нам, что vgo не знает путь импорта нашего пакета. Есть два способа сказать это:
- Добавить
module
заявление кgo.mod
, - Добавить
import
комментарий к нашему пакету.
Сейчас мы перейдем к варианту 2 и вернемся к варианту 1. Измените первую строку
main.go
быть:package main // import "my/import/path/hello"
- Добавить
$ vgo build
в последний раз.Запустите бинарный файл:
$ ./hello
Hello, World
Замечания: go.mod
теперь содержит module
строка (вариант 1 выше):
$ cat go.mod
module my/import/path/hello
Если вы внутриGOPATH
ошибка в шаге 5 не должна возникать - vgo build
должен автоматически выяснить, что вы внутри GOPATH
и добавить module
линия соответственно.
С помощью vgo run
(без использования vgo build
)
Для этого примера, давайте использовать hello.go
из тура по версионному Go (vgo):
$ go get -u golang.org/x/vgo
$ mkdir /tmp/hello2
$ curl -sS https://swtch.com/hello.go >hello.go
$ vgo run hello.go
cannot determine module root; please create a go.mod file there
$ touch go.mod
$ vgo run hello.go
vgo: resolving import "rsc.io/quote" vgo: finding rsc.io/quote (latest) vgo: adding rsc.io/quote v1.5.2 Hello, world.