Голанг: Как использовать VGO?ошибка: «не могу найти пакет» - PullRequest
0 голосов
/ 11 июня 2018
  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 Ответ

0 голосов
/ 12 июня 2018

Использование vgo build

Вот пошаговое руководство по использованию vgo "Hello, World", включая распространенные ошибки и способы их устранения.

  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 из Тур по версионному Го (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.
    
...