本文主要介绍Go mod 的配置过程中遇到的问题和使用。也是我在初次使用中遇到的问题,做个记录。
如何开启go mod 配置?如何解决go get 超时问题?Goland使用 go mod 包管理时,怎么引入github上的包?Goland使用 go mod 包管理时,怎么引入自己的包?一、开启go mod 配置
终端中使用 go env 查看 GO111MODulE 配置情况GO111MODulE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。GO111MODulE=on,go命令行会使用modules,而一点也不会去GOPATH/src目录下查找。 (pkg 包都存放在 $GOPATH/pkg 下)GO111MODulE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。(pkg 包都存放在 $GOPATH/pkg 下)
我本人使用的是 GO111MODulE=auto , 可以兼容以前的项目(没使用go mod的项目)。
为了说清楚问题,我自己建了一个项目。
我建了自己的项目模块redisStudy在项目根目录(…/redisStudy/ )执行了 go mod init redisStudy 命令 ,初始化mod 成功,生成了go.mod 文件。 项目的各个包目录下,不要再执行了 go mod init命令了。这个命令只用在需要使用go mod 管理的项目模块的根目录执行一次就可以了。新建了我自己的两个包,logicreIDs和LoginQueuepackage logicredisimport ( "github.com/go-redis/redis" "log")var redisClIEnt *redis.ClIEntfunc NewRedisClIEnt(url string, db, poolSize int) (*redis.ClIEnt, error){ opt, err := redis.ParseURL(url) if poolSize > 0 { opt.PoolSize = poolSize } if db > 0 { opt.DB = db } if err != nil { log.Printf("new redis clIEnt url:%v error:%v", url, err) return nil, err } redisClIEnt := redis.NewClIEnt(opt) pong, err := redisClIEnt.Ping().Result() if err != nil { log.Printf("redis clIEnt pong:%v error:%v", pong, err) return nil, err } log.Printf("[redis] new redis url:%v pong:%v", url, pong) return redisClIEnt, nil}func RedisClIEnt() *redis.ClIEnt{ return redisClIEnt}
注意这里我使用了import “github.com/go-redis/redis” ,这里我并没有下载包。所以一定会找不到。
按照过去的做法,要编译logicredis.go需要执行go get 命令 下载github.com/go-redis/redis包到 $GOPATH/src。但是,使用了新的包管理就不在需要这样做了。
直接 go build logicredis.go
go 会自己动下载依赖包(这里可能问遇到 下载超时的问题,如需解决,请看问题二“go get 超时问题”)。
使用Go的包管理方式,依赖的包下载到哪里了?还在GOPATH里吗?
不在,使用Go的包管理方式,依赖的第三方包被下载到了$GOPATH/pkg/mod路径下。
二、go get 超时问题
go env--------...goproxy="https://proxy.golang.org,direct"...
如果是这个代理,基本就会超时,修改为 七牛的代理即可
终端执行 set goproxy=“https://goproxy.cn” 然后go env查看是否设置成功
go env--------...goproxy="https://goproxy.cn"...
三、Goland使用 go mod 导入 github上的包
首先 启用 Goland 的 go mod ,file->setting->Go->Go Modules
Enable Go modules integration 打上勾
如果 不进行如上配置,在引用 github上的包时,就会报错,提示找不到路径,如下图。
新建一个项目
在项目根目录下使用 “go mod init mod名” 初始化 mod,初始化成功后会在执行命令的根目录下出现go.mod文件。
然后在包B引入自己的包A的的时候,import mod名/A 即可。
我建了自己的项目模块redisStudy
在项目根目录(…/redisStudy/ )执行了 go mod init redisStudy 命令 ,初始化mod 成功,生成了go.mod 文件。 项目的各个包目录下,不要再执行了 go mod init命令了。这个命令只用在需要使用go mod 管理的项目的根目录执行一次就可以了。
新建了我自己的两个包,logicreIDs和LoginQueue
我在LoginQueue 需要引用 logicreIDs 时 使用 import “redisStudy/logicredis” 即可。
参考:参考文章链接 https://zhuanlan.zhihu.com/p/60703832
总结以上是内存溢出为你收集整理的Go Mod 配置全部内容,希望文章能够帮你解决Go Mod 配置所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)