请教 Go Mod 到底怎么用...被虐哭.. - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
richzhu
V2EX    Go 编程语言

请教 Go Mod 到底怎么用...被虐哭..

  •  1
     
  •   richzhu 2019-07-12 14:11:56 +08:00 10306 次点击
    这是一个创建于 2284 天前的主题,其中的信息可能已经有所发展或是发生改变。

    各位大佬好,想学习 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 这个包... 详见问题中的截图

    27 条回复    2019-07-23 09:01:52 +08:00
    pifuant
        1
    pifuant  
       2019-07-12 14:16:39 +08:00
    把你项目放到 gopath 里
    richzhu
        2
    richzhu  
    OP
       2019-07-12 14:18:44 +08:00
    @pifuant 这样子的嘛 不是说 go mod 不需要 gopath 了嘛
    myyou
        3
    myyou  
       2019-07-12 14:28:17 +08:00   1
    你 ide go 库路径配置的不对,所以 ide 无法代码提示,但是你直接用命令 go build 肯定是能编译的
    linxl
        4
    linxl  
       2019-07-12 14:32:43 +08:00   1
    goland 设置: Go -> Go Modules -> 勾选 Enable Go Modules ...
    mosfet
        5
    mosfet  
       2019-07-12 14:32:48 +08:00
    贴个 go env 看看
    tcpdump
        6
    tcpdump  
       2019-07-12 14:33:35 +08:00
    GO 奇葩的受害者之一
    lixikei
        7
    lixikei  
       2019-07-12 14:33:45 +08:00   1
    ide goland?
    preferences>go>go modules(vgo)
    勾选 enable go modules(vgo) integration
    前提 goland 版本要大于等于 2018.3
    log4j
        8
    log4j  
       2019-07-12 14:39:19 +08:00   1
    golang 默认不会用 mod,你需要在配置里面开启,就可以啦
    ScepterZ
        9
    ScepterZ  
       2019-07-12 14:40:34 +08:00   1
    是 ide 的问题
    chenset
        10
    chenset  
       2019-07-12 14:42:52 +08:00   2


    设置成这样就行了
    richzhu
    11
    richzhu  
    OP
       2019-07-12 14:45:13 +08:00
    感谢各位大佬,设置 IDE 后果然好了~ 已挨个感谢~~ 诚心祝各位热心大佬终生无 Bug~
    nanjishidu
        12
    nanjishidu  
       2019-07-12 14:46:47 +08:00
    求教 vscode 配置
    index90
        13
    index90  
       2019-07-12 14:58:00 +08:00
    IDE 没配好,Go 又背锅
    creedowl
        14
    creedowl  
       2019-07-12 15:07:38 +08:00 via Android
    mian.go 2333
    richzhu
        15
    richzhu  
    OP
       2019-07-12 15:35:03 +08:00
    @creedowl “ mian ” 23333
    richzhu
        16
    richzhu  
    OP
       2019-07-12 15:35:38 +08:00
    @index90 这里有锅的事?只是请教用法,出门左转工地,那里杠条多
    Muninn
        17
    Muninn  
       2019-07-12 15:40:45 +08:00   1
    vscode 只用装个 go 插件什么都不用配
    @nanjishidu
    dongxiaozhuo
        18
    dongxiaozhuo  
       2019-07-12 15:56:55 +08:00
    看起来是个 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 的文档,虽然特别的繁杂,光是一个版本号管理就能绕的云里雾里的。不过看懂之后,就知道应该如何正确使用了。
    richzhu
        19
    richzhu  
    OP
       2019-07-12 16:04:48 +08:00
    @dongxiaozhuo 谢谢,我没有怪 Golang 也没有怪 go mod,我学 go 是自愿的没有人强制的~ 确实是自己没有搞懂也非常想搞懂,所以才会上来问问呢,谢谢提醒啦~ 以后遇到问题会先去仔细查看文档的~
    victrec
        20
    victrec  
       2019-07-12 16:09:35 +08:00
    @nanjishidu "go.useLanguageServer": true, 用 gopls
    reus
        21
    reus  
       2019-07-12 16:09:54 +08:00   1
    很明显是 IDE 的问题,go 命令完全没有问题。
    别用这个垃圾的“ IDE ”了,vscode 不好用吗。
    reus
        22
    reus  
       2019-07-12 16:10:05 +08:00
    @pifuant 早就不用了
    reus
        23
    reus  
       2019-07-12 16:10:52 +08:00
    @tcpdump 奇葩也是 goland 奇葩,不关 go 的事,go 命令跑得好好的,依赖也全都下载了
    janxin
        24
    janxin  
       2019-07-12 17:17:24 +08:00
    GoLand 的问题,默认不开启,会问你开不开,你要是不点开就只能手工开了
    kzzhr
        25
    kzzhr  
       2019-07-12 20:58:06 +08:00 via iPhone   1
    提个方法上的建议

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

    其它问题类似
    nanjishidu
        26
    nanjishidu  
       2019-07-15 15:29:44 +08:00
    @victrec 用了这个也不是很好用 我是每个项目单独一个 GOPATH 不知道这样设置是不是有问题。导致我的提示不能用,自动格式化也不能用。
    layxy
        27
    layxy  
       2019-07-23 09:01:52 +08:00
    使用 go mod 项目想放哪里就放哪里,使用 goland 启用项目 go mod 就可以了,然后设置下代理,导包很简单,直接快捷键同步包速度很快很方便
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5458 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 01:24 PVG 09:24 LAX 18:24 JFK 21:24
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86