go语言试玩

go tour

go语言官方文档中推荐了一个入门教程:A Tour of Go,根据官方描述,很简单就能安装成功,但是由于众所周知的原因,单单是下载就不容易。终于下载完成准备运行,报出如下错误:

1
Couldn't find tour files: could not find go-tour content; check $GOROOT and $GOPATH

错误原因:

1
GO111MODULE = on

由于启用了go module设置,tour的源码被下载到$GOPATH/pkg/mod/golang.org/x/tour@v0.0.0-20191002171047-6bb846ce41cd,但是当运行tour启动命令时,程序会到src目录下查找所需的文件,就出现了找不到文件的错误信息。

解决方案1:

将源码文件夹拷贝到$GOROOT$GOPATHsrc目录下,再运行tour

解决方案2:

修改源码路径下的local.go文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
func findRoot() (string, error) {
...

if os.Getenv("GO111MODULE") == "on" {
pkgDir := filepath.Join(os.Getenv("GOPATH"), "pkg", "mod")
cfg := &packages.Config{Mode: packages.LoadFiles, Dir: pkgDir}
pkgs, _ := packages.Load(cfg, basePkg)
for _, pkg := range pkgs {
for _, goFile := range pkg.GoFiles {
root := filepath.Dir(goFile)
if isRoot(root) {
return root, nil
}
}
}
}
return "", fmt.Errorf("could not find go-tour content; check $GOROOT and $GOPATH")
}

参考文献