go知识点总结

一.go包的管理的进化过程

1.GOPATH

GOROOT的说明:go在安装时,其实是安装的go的标准依赖库和编译器,GOROOT环境变量存放的就是这些内容
GOPATH:环境变量是指向用户域,是用户私有库以及第三方库的所在位置
GOPATH的缺点:对于同一个pkg不能在GOPATH中存放不同的版本
为了解决GOPATH的缺点,之后使用vendor进行解决该问题

2.Vendor

Vendor是将本项目的依赖放到本项目的vendor中,这样不同项目所需要的同一个pkg的不同的版本,也不会有影响。项目编译时,编译器会优先从vendor中查找依赖,若vendor中没有,则从GOPATH中继续寻找。

vendor的搜索顺序:

首先是当前文件所在的路径寻找vendor,若没有,再从上级目录继续寻找,之后是项目根目录继续寻找,若没有找到则从GOPATH中查找
vendor的缺点:无法清晰查看目录包中的依赖的关系,依赖包升级不方便审核
为了解决上面的问题,出现了Go Module

3.Go Module

首先说下语义化版本:v(major).(minor).(patch)
major:主版本号
minor:子版本号
patch:补丁
Go Module 记录了依赖情况,版本号和hash值

3.1.使用方式

go mod init:完整的为:go mod init [module]
这样会自动生成go.mod文件,内容如下

当使用go get 依赖包时,会自动修改go.mod和go.sum中的内容

3.2.go.mod文件的四个名称的说明

1.module:声明的module的名称
2.require:声明的依赖及其版本号
3.replace:替换require中声明的依赖,使用另外的依赖及其版本号
4.exclude:禁用指定的依赖
5.indrect:间接依赖
间接依赖出现的原因:1)直接依赖未启用Go Module,即没有go.mod文件。2)直接依赖的go.mod文件缺失的部分依赖
查看依赖关系 :go mod why -m 查看这个pkg被哪个依赖引入的
自动整理go.mod:go mod tidy
6.incompatible
如果major的版本号大于1,其版本号还需要体现在module名字中,比如:
github.com/Rain/m 为例,假如其版本号为v3.6.0由于其module名中未附带版本信息,这个module就是不规范的module,此时在go.mod中就会出现incompatible关键字。

当执行go build/go get 时都会更新go.mod/go.sum文件
go get -v github.com/google/uuid@v1.1.0下载固定版本的module,会导致go.mod和go.sum中进行对应的更新

二.go mod常用的操作命令

查看依赖关系 :go mod why -m 查看这个pkg被哪个依赖引入的
自动整理: go.mod:go mod tidy
下载所有依赖: go mod download 若加上 x 表示打印详细的下载信息。
将依赖复制到 vendor 目录下: go mod vendor
打印模块依赖图: go mod graph
初始化go.mod文件:go mod init

三.如何解决包冲突的问题

当出现下面的问题时,出现冲突,一个包的不同版本被同时调用
在这里插入图片描述
操作:暂时注释掉后引用的包,然后执行:go mod why -m pkg@version
显示如下的调用信息:
在这里插入图片描述
这里可以看出,在另一处的broker的调用中已经使用了common包,这样就可以看出包的冲突,之后可以使用新的包,使两者都可以正常调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为Go语言初学者,以下是一些重要的知识点和建议,可以帮助你开始学习和使用Go语言: 1. 安装和设置Go环境:首先,确保在计算机上安装了Go语言的最新版本,并设置好相关的环境变量。可以从官方网站(https://golang.org)下载安装程序并按照说明进行安装。 2. 了解基本语法和数据类型:学习Go语言的基本语法,包括变量声明、函数定义、条件语句、循环语句等。掌握Go语言的基本数据类型,如整型、浮点型、字符串、布尔型等。 3. 学习函数和包:函数是Go语言的基本构建块之一。了解如何定义和调用函数,并理解函数的参数和返回值。此外,了解如何使用包(package)来组织和重用代码。 4. 并发编程:Go语言内置了强大的并发编程支持。学习使用goroutine和channel进行并发编程,以实现高效的并发处理和协作。 5. 错误处理:Go语言鼓励使用显式的错误处理机制。学习使用错误类型和错误处理函数来处理可能发生的错误,并避免潜在的错误。 6. 标准库和第三方库:探索Go语言的标准库,了解如何使用其中的功能和工具。此外,也要了解常用的第三方库,它们提供了许多有用的功能和工具,可以加快开发速度。 7. 学习常用的工具和技术:Go语言有许多强大的工具和技术可用于开发。学习使用Go工具链(如go build、go run、go test等),以及版本管理工具(如git)和构建工具(如Makefile)等。 8. 实践和项目:通过实践和参与项目,将所学的知识应用到实际中。可以尝试解决一些小型的编程问题,或者参与开源项目,以提高自己的编程能力和经验。 9. 阅读文档和教程:Go语言有丰富的文档和教程资源可供学习。阅读官方文档、博客文章、书籍和在线教程,可以帮助你更深入地理解和掌握Go语言的知识和技巧。 10. 加入社区和交流:加入Go语言的社区,与其他开发者交流和分享经验。参加本地的Go语言用户组、在线论坛或社交媒体群组,可以获取更多资源、解答问题,并与其他Go开发者建立联系。 记住,持续学习和实践是掌握任何编程语言的关键。通过不断地编写代码、阅读文档和参与项目,你将逐渐掌握和提高Go语言的技能。祝你在学习Go语言的过程中取得成功!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值