官方golang包管理神器,值得一试!

简介: 官方golang包管理神器,值得一试!

这是一篇很短的文章,诉说着高效的包管理工具 go mod

image.png


我们上次说过如何让一个项目在 Goland 编译器跑起来,但是要自己去下包,要花不少时间找包下包,是不是很麻烦?


java 里有一个叫 maven 的包管理工具, go 也有一个叫 go mod 的管理工具,可以管理项目引用的第三方包版本、自动识别项目中用到的包、自动下载和管理包。


怎么用?


找到你的项目,直接执行


go mod init main.go


执行完会自动识别项目中用到的第三方包,并生成一个 go.mod 文件

$ cat go.mod
module collector_go
go 1.14
require (
  github.com/gogo/protobuf v1.3.1 // indirect
  github.com/golang/protobuf v1.4.2
  google.golang.org/protobuf v1.23.0
)

然后直接 buildrun 就会自动下载包啦~!


go build -o ./collector_go main.go

有一个小前提


golang>=1.12

添加环境变量 GO111MODULEon 或者 auto ,设置方法


go env GO111MODULE=on


他解决了什么问题?


aHR0cHM6Ly9jb2RpbmczbWluLm9zcy1hY2NlbGVyYXRlLmFsaXl1bmNzLmNvbS9jb2RpbmczbWluLzIwMjAtMDUtMTktMTU0MzU5LmpwZw.png

原来的包管理方式


  • 在不使用额外的工具的情况下,Go 的依赖包需要手工下载,
  • 第三方包没有版本的概念,如果第三方包的作者做了不兼容升级,会让开发者很难受
  • 协作开发时,需要统一各个开发成员本地$GOPATH/src下的依赖包
  • 引用的包引用了已经转移的包,而作者没改的话,需要自己修改引用。
  • 第三方包和自己的包的源码都在src下,很混乱。对于混合技术栈的项目来说,目录的存放会有一些问题


新的包管理模式解决了以上问题


  • 自动下载依赖包
  • 项目不必放在$GOPATH/src内了
  • 项目内会生成一个go.mod文件,列出包依赖
  • 所以来的第三方包会准确的指定版本号
  • 对于已经转移的包,可以用 replace 申明替换,不需要改代码


tips

Q1: 我的包下哪去了?

A: 依赖的第三方包被下载到了 $GOPATH/pkg/mod 路径下。

Q2: GO111MODULE 的三个参数 autoonoff 有什么区别?

A: auto 根据是否在 src 下自动判定, on 只用 go.modoff 只用 src

Q3: 依赖包中的地址失效了怎么办?比如 golang. org/x/… 下的包都无法下载怎么办?

A: 在 go.mod 文件里用 replace 替换包,例如

replace golang.org/x/text => github.com/golang/text latest


这样, go 会用 github.com/golang/text 替代 golang.org/x/text


Q4: 在 go mod 模式中,项目自己引用自己中的某些模块怎么办?


A: go.mod 文件里的第一行会申明 module main ,把这个 main 改为你的项目名,引用的时候就 import "项目名/模块名" 即可。


根据官方的说法,从 Go 1.13 开始,模块管理模式将是 Go 语言开发的默认模式

参考掘金:https://juejin.im/post/5c9c8c4fe51d450bc9547ba1

相关文章
|
NoSQL 安全 Go
Golang 官方推荐使用的 Redis 客户端 redigo
Golang 官方推荐使用的 Redis 客户端 redigo
275 0
|
关系型数据库 MySQL Java
100天精通Golang(基础入门篇)——第16天:深入解析Go语言包的使用和包管理
100天精通Golang(基础入门篇)——第16天:深入解析Go语言包的使用和包管理
82 0
|
存储 Java Linux
知识分享之Golang——Bleve官方案例解析
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。 知识分享系列目前包含Java、Golang、Linux、Docker等等。
246 0
知识分享之Golang——Bleve官方案例解析
|
程序员 Go API
用golang官方Docker镜像运行项目
如果当前电脑没有配置go环境,通过Docker也可以编译、构建、运行go程序,接下来一起实战试试
868 0
用golang官方Docker镜像运行项目
|
Cloud Native 前端开发 Go
探索 Golang 云原生游戏服务器开发,根据官方示例实战 Gorilla WebSocket 的用法
探索 Golang 云原生游戏服务器开发,根据官方示例实战 Gorilla WebSocket 的用法
692 0
|
Go 开发工具 git
golang 的glide包管理使用技巧教程
安装glide wemall git:(master) go get github.com/Masterminds/glide wemall git:(master) go install github.
2036 0
|
2月前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
110 4
Golang语言之管道channel快速入门篇
|
2月前
|
Go
Golang语言文件操作快速入门篇
这篇文章是关于Go语言文件操作快速入门的教程,涵盖了文件的读取、写入、复制操作以及使用标准库中的ioutil、bufio、os等包进行文件操作的详细案例。
66 4
Golang语言文件操作快速入门篇
|
2月前
|
Go
Golang语言之gRPC程序设计示例
这篇文章是关于Golang语言使用gRPC进行程序设计的详细教程,涵盖了RPC协议的介绍、gRPC环境的搭建、Protocol Buffers的使用、gRPC服务的编写和通信示例。
101 3
Golang语言之gRPC程序设计示例
|
2月前
|
安全 Go
Golang语言goroutine协程并发安全及锁机制
这篇文章是关于Go语言中多协程操作同一数据问题、互斥锁Mutex和读写互斥锁RWMutex的详细介绍及使用案例,涵盖了如何使用这些同步原语来解决并发访问共享资源时的数据安全问题。
86 4