2
  1. 我有一个项目目前在我的 GOPATH 下/usr/local/go/src/

  2. 然后我进入我的项目根目录并运行:go get -u golang.org/x/vgo

  3. 在我的 main.go 中,我想使用 lib httprouter,所以我在 import 语句中添加了:

    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)

我理解错误,它似乎在 GOPATH 或 GOROOT 下搜索 httprouter。那么我是否必须做任何其他事情才能让 vgo 完成它的工作并且我可以成功运行我的服务器?

4

1 回答 1

4

使用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来自A Tour of Versioned 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.
    
于 2018-06-12T14:03:33.783 回答