Golang中"go get"命令失败:模块路径无法确定(位于GOPATH之外且无import注释)
Golang中"go get"命令失败:模块路径无法确定(位于GOPATH之外且无import注释) 大家好,
我使用的是 Mac OS 系统。
环境设置:
这是我当前的路径配置:
$ echo $PATH
/Users/sshridhar/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/anaconda3/bin:/usr/local/apache-maven-3.5.4/bin:/Users/sshridhar/go/bin:/usr/local/opt/go/libexec/bin
$ echo $GOPATH
/Users/sshridhar/go
$ echo $GOBIN
/Users/sshridhar/go/bin
$ echo $GOROOT
/usr/local/opt/go/libexec
Go 安装位置:
$ pwd
/Users/sshridhar/go
$ ls
bin pkg src
Go 环境变量:
go env
GOARCH="amd64"
GOBIN="/Users/sshridhar/go/bin"
GOCACHE="/Users/sshridhar/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/sshridhar/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/opt/go/libexec"
GOTMPDIR=""
GOTOOLDIR="/usr/local/opt/go/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/sshridhar/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/t9/mfm7png979g0zllnllnqspyr0000gn/T/go-build146906349=/tmp/go-build -gno-record-gcc-switches -fno-common"
问题描述:
我的 go get 命令执行失败,具体表现如下:
$ go get https://github.com/golang/example
go: cannot determine module path for source directory /Users/sshridhar (outside GOPATH, no import comments)
$ go get http://github.com/golang/example
go: cannot determine module path for source directory /Users/sshridhar (outside GOPATH, no import comments)
$ go get http://github.com/golang/example.git
go: cannot determine module path for source directory /Users/sshridhar (outside GOPATH, no import comments)
系统总是试图访问 /Users/sshridhar 目录,而实际的 Go 文件夹位于:/Users/sshridhar/go
我之前使用类似的配置是可以正常工作的。不确定期间发生了什么变化。希望能获得解决此问题的帮助。
更多关于Golang中"go get"命令失败:模块路径无法确定(位于GOPATH之外且无import注释)的实战教程也可以访问 https://www.itying.com/category-94-b0.html
swapan:
GOMOD=“/Users/sshridhar/go.mod”
我认为这就是问题所在。这个文件存在吗?你的 Go 环境认为它处于模块化程序中,所以当你运行 go get 时,它会尝试更新这个文件,但该文件可能是空的或者不包含模块路径。
GOMOD=“/Users/sshridhar/go.mod”
更多关于Golang中"go get"命令失败:模块路径无法确定(位于GOPATH之外且无import注释)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
谢谢。
是的,在路径 /Users/sshridhar/go.mod 下没有文件。
所以,我执行了 export GOMOD = "",并将其添加到我的 .bashrc 文件中(已加载),但 go env 似乎没有获取到这个设置。我应该在哪里/如何更改它?并且我应该保持它为 "" 吗?
func main() {
fmt.Println("hello world")
}
以下是我所做的操作,成功解决了问题。
修复前我的 .bashrc 文件内容如下:
export GOPATH=/Users/sshridhar/go
export GOROOT=/usr/local/opt/go/libexec
export PATH=$PATH:$GOPATH/bin
export PATH=$PATH:$GOROOT/bin
export GOBIN=$GOPATH/bin
export PATH=$PATH:/Users/sshridhar/go
export GO111MODULE=on
我将最后一行改为:export GO111MODULE=auto,重新加载了 bashrc 文件,然后我的 go 环境变量显示如下:
$ go env
GOARCH="amd64"
GOBIN="/Users/sshridhar/go/bin"
GOCACHE="/Users/sshridhar/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/sshridhar/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/opt/go/libexec"
GOTMPDIR=""
GOTOOLDIR="/usr/local/opt/go/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
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/t9/mfm7png979g0zllnllnqspyr0000gn/T/go-build974052246=/tmp/go-build -gno-record-gcc-switches -fno-common"
上面的 go env 输出中不再显示 GOMOD。
现在一切正常了……
感谢提供的帮助!
根据你的描述,问题在于你在 GOPATH 之外的目录(/Users/sshridhar)中执行了 go get 命令,但该目录没有有效的 Go 模块配置。从 go env 输出可以看到 GOMOD="/Users/sshridhar/go.mod",这表明 Go 试图在当前目录(/Users/sshridhar)中查找模块定义。
以下是解决方案:
1. 在项目目录中初始化 Go 模块
由于你不在 GOPATH/src 目录中,需要为你的项目初始化一个模块:
cd /Users/sshridhar/go
go mod init your-module-name
例如:
cd /Users/sshridhar/go
go mod init example.com/user/project
2. 使用正确的 go get 语法
go get 应该使用模块路径而不是 URL。正确的命令是:
go get github.com/golang/example
不是:
go get https://github.com/golang/example
go get http://github.com/golang/example
3. 完整的示例流程
# 切换到你的 Go 工作目录
cd /Users/sshridhar/go
# 初始化模块
go mod init example.com/user/myproject
# 获取依赖
go get github.com/golang/example
# 或者指定特定版本
go get github.com/golang/example@latest
4. 如果你在开发自己的模块
在你的项目目录中创建 go.mod:
mkdir -p /Users/sshridhar/go/src/your-project
cd /Users/sshridhar/go/src/your-project
go mod init github.com/yourusername/your-project
5. 检查当前目录的模块状态
# 在 /Users/sshridhar/go 目录中执行
go list -m
错误发生的原因是 Go 1.11+ 引入了模块支持,当在 GOPATH 之外且没有 go.mod 文件的目录中执行 go get 时,无法确定模块路径。通过初始化模块即可解决此问题。

