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

4 回复

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 时,无法确定模块路径。通过初始化模块即可解决此问题。

回到顶部