Голанг: Как использовать VGO? ошибка: "не могу найти пакет"

  1. У меня есть проект, который в настоящее время находится под моей GOPATH /usr/local/go/src/

  2. Затем я зашел в корень своего проекта и запустил: go get -u golang.org/x/vgo

  3. В моем main.go я хочу использовать lib httprouter, поэтому я добавил в оператор импорта:

    import ( "github.com/julienschmidt/httprouter" )

  4. Я побежал vgo build

  5. Затем, когда я запускаю свой сервер как обычно, я получаю следующую ошибку:

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В том числе распространенные ошибки и способы их устранения.

  1. $ go get -u golang.org/x/vgo
  2. $ cd /tmp/hello # Outside of GOPATH.
  3. $ cat main.go

    package main
    
    import "fmt"
    
    func main() {
        fmt.Println("Hello, World")
    }
    
  4. $ vgo build

    cannot determine module root; please create a go.mod file there
    
  5. Эта ошибка говорит нам о том, что нам нужно указать корень нашего модуля vgo. Модуль представляет собой набор пакетов (возможно, один) версий вместе. Создать пустой go.mod файл для обозначения это корень модуля:

    $ touch go.mod
    
  6. Попробуйте построить снова: $ vgo build,

    vgo: cannot determine module path for source directory
    /tmp/hello (outside GOPATH, no import comments)
    
  7. Эта ошибка говорит нам, что vgo не знает путь импорта нашего пакета. Есть два способа сказать это:

    1. Добавить module заявление к go.mod,
    2. Добавить import комментарий к нашему пакету.

    Сейчас мы перейдем к варианту 2 и вернемся к варианту 1. Измените первую строку main.go быть:

    package main // import "my/import/path/hello"
    
  8. $ vgo build в последний раз.

  9. Запустите бинарный файл: $ ./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):

  1. $ go get -u golang.org/x/vgo
  2. $ mkdir /tmp/hello2
  3. $ curl -sS https://swtch.com/hello.go >hello.go
  4. $ vgo run hello.go

    cannot determine module root; please create a go.mod file there
    
  5. $ touch go.mod

  6. $ 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.
    
Другие вопросы по тегам