Golang Go语言 请教 Go Mod 到底怎么用

发布于 1周前 作者 h691938207 来自 Go语言

Golang Go语言 请教 Go Mod 到底怎么用

各位大佬好,想学习 go mod 但是一脸懵逼,当我 go get 了一个包后,在 IDE 里写代码,找不到这个包,求指点我到底哪里错了。。完全是按照网上教程做的呢,我看写教程的人怎么就都可以 我就不行 T_T

问题:

// 下载新包
export GO111MODULE=on
export GOPROXY=https://goproxy.cn
go get gopkg.in/mgo.v2
也试过 在 mian.go 中写入 import gopkg.in/mgo.v2 然后运行 go mod tidy 也不行,详见最后一行

IDE 中无法使用
img
手动输入 import 也没有用,就是找不到 mgo 这个包,开始明明都 go get 也 go mod tidy 了呀
img

为了详细说明我遇到的问题,我记录下了详细步骤,供大佬参考

操作步骤:

cd connectToMongo/  # 项目路径,项目名称为 connectToMongo
go mod init # 初始化

返回报错:
go: cannot determine module path for source directory /Users/rich/Office/GitLab/connectToMongo (outside GOPATH, no import comments)

touch go.mod # 由于初始化失败,手动创建
echo "module connectToMongo" >> go.mod # 查了相关教程向里面手动输入 module + 项目名

go mod tidy # 执行好后 go.mod 文件会多出一行
cat go.mod  # 查看一下

##go.mod 内容##

module connectToMongo

go 1.12

在 IDE 中创建 main.go 代码如下

package main

import ( “fmt” “gopkg.in/mgo.v2” )

func main() { session, err := mgo.Dial("")

fmt.Println(session, err)

}

编辑好 mian.go 后,在项目目录中运行


export GO111MODULE=on
export GOPROXY=https://goproxy.cn
go mod tidy

tidy 命令返回: go: finding gopkg.in/mgo.v2 latest go: finding gopkg.in/check.v1 latest

go.mod 与 go.sum 文件内容

###go.mod 内容###
module connectToMongo

go 1.12

require ( github.com/kr/pretty v0.1.0 // indirect gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce gopkg.in/yaml.v2 v2.2.2 // indirect )

###go.sum 内容### github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce h1:xcEWjVhvbDy+nHP67nPDDpbYrY+ILlfndk4bRioVHaU= gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

返回 IDE 仍然无法使用 mgo 这个包... 详见问题中的截图


更多关于Golang Go语言 请教 Go Mod 到底怎么用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

28 回复

把你项目放到 gopath 里

更多关于Golang Go语言 请教 Go Mod 到底怎么用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这样子的嘛😭 不是说 go mod 不需要 gopath 了嘛

你 ide go 库路径配置的不对,所以 ide 无法代码提示,但是你直接用命令 go build 肯定是能编译的

goland 设置: Go -> Go Modules -> 勾选 Enable Go Modules …

贴个 go env 看看

GO 奇葩的受害者之一

ide goland?
preferences>go>go modules(vgo)
勾选 enable go modules(vgo) integration
前提 goland 版本要大于等于 2018.3

golang 默认不会用 mod,你需要在配置里面开启,就可以啦

是 ide 的问题



设置成这样就行了

感谢各位大佬,设置 IDE 后果然好了~ 已挨个感谢~~ 诚心祝各位热心大佬终生无 Bug~

求教 vscode 配置

IDE 没配好,Go 又背锅

“ mian ” 23333

这里有锅的事?只是请教用法,出门左转工地,那里杠条多

vscode 只用装个 go 插件什么都不用配

看起来是个 IDE 的配置问题,不能怪 Golang 和 go mod。你应该查一下文档,看看你的 IDE 如何支持 go mod 模式。

毕竟 go mod 模式下,依赖是放在 $GOPATH/pkg/mod 目录下的,非 go mod 模式下,go get 到的依赖是放在 $GOPATH/src 目录下的。IDE 没有配置正确,自然找不到依赖。

另外你执行 go mod init 的时候的报错,是因为当前项目并不在 $GOPATH/src 目录下,所以找不到默认的 module path/name,你需要执行 go mod init $module_path/$module_name,就可以正确执行了。


推荐先去看看官方 go mod 的文档,虽然特别的繁杂,光是一个版本号管理就能绕的云里雾里的。不过看懂之后,就知道应该如何正确使用了。

谢谢,我没有怪 Golang 也没有怪 go mod,我学 go 是自愿的没有人强制的~ 确实是自己没有搞懂也非常想搞懂,所以才会上来问问呢,谢谢提醒啦~ 以后遇到问题会先去仔细查看文档的~

“go.useLanguageServer”: true, 用 gopls

很明显是 IDE 的问题,go 命令完全没有问题。
别用这个垃圾的“ IDE ”了,vscode 不好用吗。

早就不用了

奇葩也是 goland 奇葩,不关 go 的事,go 命令跑得好好的,依赖也全都下载了

GoLand 的问题,默认不开启,会问你开不开,你要是不点开就只能手工开了

提个方法上的建议

初试 gomod,应该优先使用命令行来跑,减少 IDE 的影响。
IDE 用出了问题,也可以换用命令行或其他 IDE,用来排查哪块出了问题。

其它问题类似

用了这个也不是很好用 我是每个项目单独一个 GOPATH 不知道这样设置是不是有问题。导致我的提示不能用,自动格式化也不能用。

使用 go mod 项目想放哪里就放哪里,使用 goland 启用项目 go mod 就可以了,然后设置下代理,导包很简单,直接快捷键同步包速度很快很方便

Go Mod是Golang的包管理工具,以下是关于Go Mod的基本使用方法:

  1. 初始化项目:使用go mod init命令初始化一个Go模块,生成一个go.mod文件,这个文件包含了项目依赖的版本、依赖关系等信息。

  2. 添加依赖:在代码中通过import引入需要的包,然后使用go get命令添加新的依赖包到项目中。go mod会自动查找、下载、引用相关module,并生成一个go.sum文件来记录dependency tree。

  3. 更新依赖:使用go get -u命令更新依赖包到最新版本。

  4. 删除依赖:使用go mod tidy命令可以删除项目中没有用到的依赖包,并标注当前的系统信息。

  5. 查看依赖:使用go list命令查看当前项目的依赖包。

  6. 其他命令

    • go mod vendor:将依赖项复制到项目的vendor目录中,以便离线构建。
    • go mod download:下载依赖项,但不会安装它们。
    • go mod verify:验证依赖项的完整性和正确性。
    • go mod graph:以依赖项图的形式打印模块依赖关系。
    • go mod why:解释为什么需要依赖项。

在使用Go Mod时,确保Go版本在1.11及以上,并配置好环境变量GO111MODULE为on或auto。此外,还可以通过Go语言的社区和论坛获取更多关于Go Mod的使用经验和技巧。

回到顶部