Golang:如何使用vgo?错误:“找不到包”

时间:2018-06-11 18:30:13

标签: go vgo

  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. 然后当我像往常一样开始运行我的服务器时,我收到以下错误:
  6. 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做它的事情,我可以成功运行我的服务器吗?

1 个答案:

答案 0 :(得分: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条评论。
    3. 我们现在使用选项2并返回选项1.将main.go的第一行更改为:

      package main // import "my/import/path/hello"
      
    4. $ vgo build最后一次。

    5. 运行二进制文件:$ ./hello

      Hello, World
      
    6. 注意:go.mod现在包含module行(上面的选项1):

      $ cat go.mod 
      module my/import/path/hello
      

      如果您在GOPATH 内,则不应发生第5步中的错误 - vgo build应自动找出您GOPATH内的错误并相应地添加module行。

      使用vgo run(不使用vgo build

      对于此示例,我们使用A Tour of Versioned Go (vgo)中的hello.go

      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.