使用go.mod将软件包安装到GOPATH目录中

hrirmatl  于 2023-01-22  发布在  Go
关注(0)|答案(2)|浏览(194)

我想使用go get安装一个包到GOPATH。这在go工具迁移到go mod支持时变得很棘手。
在项目目录(=带有go.mod文件的目录)之外没有问题。在项目目录中,我希望设置G0111MODULE变量应该可以完成这项工作,但它没有。

G0111MODULE=off go get <package name>

我怎样才能安装一个软件包到GOPATH目录中包含go.mod文件?谢谢。
go env输出:

GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/zb/Library/Caches/go-build"
GOENV="/Users/zb/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/zb/dev/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/Cellar/go/1.13/libexec"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.13/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/zb/dev/mycopmany/links/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/gf/8xg53y0j2h9d3k5g3_vvvw9m0000gn/T/go-build248955952=/tmp/go-build -gno-record-gcc-switches -fno-common"
cxfofazt

cxfofazt1#

变量名为GO111MODULE(字母为O),而不是G0111MODULE(数字为0)。

5vf7fwbs

5vf7fwbs2#

看起来OP有两个不同的需求:

a.使用go.mod将软件包安装到GOPATH目录中

(as在标题中)
如文档中所述(来源:Deprecation of 'go get' for installing executables - The Go Programming Language),
从Go语言1.17开始,不推荐使用go get安装可执行文件,可以使用go install
因此,从包含go.mod文件的目录中运行go install(不带参数,如this example)将把可执行文件移动到$GOPATH/bin,这将允许您从任何位置运行可执行文件-前提是$GOPATH/bin$PATH环境变量的一部分。

B.“(...)我想安装一个可以作为命令行工具访问的go程序。”

(as(见执行主任的一项评论)
现在,为了满足这一特定需求,您可以将/path/to/project_directory添加到$PATH

# either by running
echo "/path/to/project_directory:$PATH" > $PATH

# or by putting the following line in `~/.bashrc` file (i.e. `/home/myuser/.bashrc`)
PATH="/path/to/project_directory:$PATH"

相关问题