首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
beego
V2EX  ›  Go

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

  •  1
     
  •   richzhu · 7 天前 · 1889 次点击

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

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


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

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

    其它问题类似
        26
    nanjishidu   4 天前
    @victrec 用了这个也不是很好用 我是每个项目单独一个 GOPATH 不知道这样设置是不是有问题。导致我的提示不能用,自动格式化也不能用。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1366 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 17ms · UTC 17:20 · PVG 01:20 · LAX 10:20 · JFK 13:20
    ♥ Do have faith in what you're doing.