我有一个项目目前正在我的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做它的事情,我可以成功运行我的服务器吗?
答案 0 :(得分:4)
vgo build
这是一个" Hello,World"使用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.