The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
richzhu

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

  •  1
     
  •   richzhu · Jul 12, 2019 · 11178 views
    This topic created in 2679 days ago, the information mentioned may be changed or developed.

    各位大佬好,想学习 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 replies  •  2019-07-23 09:01:52 +08:00
    pifuant
    pifuant
    Jul 12, 2019
    1
    把你项目放到 gopath 里
    richzhu
    richzhu
    OP
    Jul 12, 2019
    2
    @pifuant 这样子的嘛😭 不是说 go mod 不需要 gopath 了嘛
    myyou
    myyou
    Jul 12, 2019❤️1
    3
    你 ide go 库路径配置的不对,所以 ide 无法代码提示,但是你直接用命令 go build 肯定是能编译的
    lazypu
    lazypu
    Jul 12, 2019❤️1
    4
    goland 设置: Go -> Go Modules -> 勾选 Enable Go Modules ...
    mosfet
    mosfet
    Jul 12, 2019
    5
    贴个 go env 看看
    tcpdump
    tcpdump
    Jul 12, 2019
    6
    GO 奇葩的受害者之一
    lixikei
    lixikei
    Jul 12, 2019❤️1
    7
    ide goland?
    preferences>go>go modules(vgo)
    勾选 enable go modules(vgo) integration
    前提 goland 版本要大于等于 2018.3
    log4j
    log4j
    Jul 12, 2019❤️1
    8
    golang 默认不会用 mod,你需要在配置里面开启,就可以啦
    ScepterZ
    ScepterZ
    Jul 12, 2019❤️1
    9
    是 ide 的问题
    chenset
    chenset
    Jul 12, 2019❤️2
    10


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

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

    其它问题类似
    nanjishidu
    nanjishidu
    Jul 15, 2019
    26
    @victrec 用了这个也不是很好用 我是每个项目单独一个 GOPATH 不知道这样设置是不是有问题。导致我的提示不能用,自动格式化也不能用。
    layxy
    layxy
    Jul 23, 2019
    27
    使用 go mod 项目想放哪里就放哪里,使用 goland 启用项目 go mod 就可以了,然后设置下代理,导包很简单,直接快捷键同步包速度很快很方便
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2437 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 11:51 · PVG 19:51 · LAX 03:51 · JFK 06:51
    ♥ Do have faith in what you're doing.