我试图像这样安装doozer:
$ goinstall github.com/ha/doozer
我得到这些错误。
goinstall: os: go/build: package could not be found locally
goinstall: fmt: go/build: package could not be found locally
goinstall: io: go/build: package could not be found locally
goinstall: reflect: go/build: package could not be found locally
goinstall: math: go/build: package could not be found locally
goinstall: rand: go/build: package could not be found locally
goinstall: url: go/build: package could not be found locally
goinstall: net: go/build: package could not be found locally
goinstall: sync: go/build: package could not be found locally
goinstall: runtime: go/build: package could not be found locally
goinstall: strings: go/build: package could not be found locally
goinstall: sort: go/build: package could not be found locally
goinstall: strconv: go/build: package could not be found locally
goinstall: bytes: go/build: package could not be found locally
goinstall: log: go/build: package could not be found locally
goinstall: encoding/binary: go/build: package could not be found locally
通常不应该显式地设置GOROOT。go命令根据它自己的目录位置自动识别适当的GOROOT。
GOPATH默认为$HOME/go。只有当你想把它放在其他地方时,你才需要显式地设置它。
GOPATH包含:
使用go install安装的二进制文件,位于$GOPATH/bin.¹
可以使用GOBIN环境变量覆盖该位置。
下载的模块源代码和校验和的缓存,位于$GOPATH/pkg/mod。
这个位置可以使用GOMODCACHE环境变量来覆盖。
如果同时设置了GOBIN和GOMODCACHE,而没有设置GO111MODULE=off,那么GOPATH本身应该基本上没有影响。
另外,在传统的GOPATH模式下(也设置了GO111MODULE=off), GOPATH包含:
用于构建包的源代码,存储在根目录树$GOPATH/src中。
使用go install安装的非二进制文件,位于$GOPATH/pkg。
安装非二进制包不再特别有用:go命令有一个构建工件的缓存,从go 1.12开始,即使是在GOPATH模式下,这也是必需的。
构建缓存不在GOPATH中。它的位置可以用GOCACHE环境变量设置。
¹二进制文件也可以在go 1.17及更早的版本上使用go get安装,但go install优先于go 1.16;见https://golang.org/doc/go1.16。
在现代围棋中,你不需要设置GOPATH或GOROOT。事实上,除非您正在做一些非常专业的事情,否则最好在您的系统上不设置它们。
使用Go模块。安装Go之后,选择一个您想要工作的目录。然后:
$ mkdir example
$ cd example
$ go mod init example.com
注意,模块名example.com是任意的;如果你把你的工作放在GitHub上,这可能是github.com/your-username/project-name。
最后一个命令将创建一个go。国防部文件;现在你可以用go get获取依赖项:
$ go get rsc.io/quote
现在你的代码使用这个依赖:
$ touch main.go
把它放在main.go中:
package main
import (
"fmt"
"rsc.io/quote"
)
func main() {
fmt.Println(quote.Go())
}
并运行:
$ go run .
W.r.t.原创问题,你现在可以得到你的doozer依赖:
$ go get github.com/ha/doozer
现在您可以在代码中使用doozer模块。等等。你也可以检查一下。Mod文件在您的目录中查看所列出的依赖项,以及它们的版本。每个模块都是自包含的,有自己的依赖版本。你可以有两个并排的模块,每个模块都有自己的功能。mod文件指向一些依赖的不同版本-这将工作正常,因为模块之间的隔离。
要了解更多信息,请从这里的官方教程开始。在几个章节中,它将引导您完成上述步骤,以及编写自己的可重用模块和包,并从其他模块导入它们。更多的交互式教程可以在https://play-with-go.dev/上找到