• 我有一个当前在我的GOPATH之下的项目/usr/local/go/src/
  • 然后进入项目根目录并运行:go get -u golang.org/x/vgo
  • 在我的main.go中,我想使用lib httprouter,因此我在import语句中添加了:
    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)
    我了解错误,似乎正在GOPATH或GOROOT下搜索httprouter。那么,我是否还需要做其他任何事情来让vgo完成其工作,然后我才能成功运行服务器?

    最佳答案

    使用vgo build
    这是使用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)

    对于此示例,让我们使用A Tour of Versioned Go (vgo)中的hello.go:
  • $ 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.
    
  • 关于go - Golang : How to use vgo?错误: “cannot find package”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50803978/

    10-08 22:41