Golang中go get无法找到主模块(go modules问题)

Golang中go get无法找到主模块(go modules问题) 在使用 Go 模块时,我无法执行 go get -v -u <some-repo>

我为此创建了一个测试项目,结构如下:

gomodinmain
├── go.mod
└── main.go
0 directories, 2 files

go.mod 文件的内容是:

module github.com/pedromss/gomodinmain

将其推送到代码仓库后,我执行以下步骤:

  • go clean -i -r -x
  • 使用 rm -rf 从文件系统中删除 src 文件夹
  • 导航到 GOPATH 之外
  • 尝试执行 go get -v -u github.com/pedromss/gomaininroot 来模拟想要开始处理此项目但本地没有代码的人

然后我收到消息:

go: cannot find main module; see 'go help modules'

如果我执行 GO111MODULE=off go get -v -u github.com/pedromss/gomodinmain,它可以正常工作。

我在这里做错了什么?


更多关于Golang中go get无法找到主模块(go modules问题)的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang中go get无法找到主模块(go modules问题)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


问题在于你尝试在未初始化模块的目录中执行 go get 命令。当你在 GOPATH 之外运行 go get 时,Go 会期望当前目录是一个有效的模块(包含 go.mod 文件),或者你需要指定模块模式。

以下是正确的步骤和示例:

  1. 在目标目录初始化模块: 如果你要在新目录获取依赖,首先需要初始化一个 Go 模块。

    mkdir myproject && cd myproject
    go mod init myproject
    

    然后执行 go get

    go get -v -u github.com/pedromss/gomodinmain
    
  2. 在现有模块目录中操作: 确保你位于包含 go.mod 文件的目录中。例如,如果你的项目结构是:

    myproject/
    ├── go.mod
    └── main.go
    

    myproject 目录下直接运行:

    go get -v -u github.com/pedromss/gomodinmain
    
  3. 使用 -d 标志仅下载代码: 如果你只想下载代码而不构建/安装,可以添加 -d 标志:

    go get -d -v -u github.com/pedromss/gomodinmain
    

错误信息 cannot find main module 表示 Go 无法在当前位置找到或识别到 go.mod 文件。通过 GO111MODULE=off 可以工作是因为它禁用了模块支持,回退到旧的 GOPATH 模式,但这不推荐使用。

示例代码演示初始化模块并获取依赖:

# 创建并进入新目录
mkdir newproject && cd newproject

# 初始化模块
go mod init example.com/newproject

# 现在可以正常使用 go get
go get -v -u github.com/pedromss/gomodinmain

这会在当前目录创建 go.mod 文件并成功获取指定的仓库。

回到顶部