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

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

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


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

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

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