[Go] 转载-Go Mod 基本工作流程
[TOC]
go module workflow
原作者: github.com/ofree8 夜读群里的叶飞
一、创建新工程
> mkdir /tmp/test-project && cd /tmp/test-project
> #
> go mod init github.com/ofree8/test-project
二、增加三方库
> # 方式一:
> go get -v go.uber.org/zap
> # 方式二:
import (go.uber.org/zap) // in file source.go
> # go构建时也会自动会去获取依赖库
> go build
三、查看项目的库依赖和对应版本
> #
> go list -m all
四、升级项目依赖库版本
> # 列出当前依赖查看可供更新的版本
> go list -m -u all
> # 更新特定三方库
> go get -u -v go.uber.org/zap
> # 查看更新结果
> go list -m all
> # 运行单元测试保证代码运行正常,这会测试所有库,包括官方库
> go test -short all
> # 测试特定模块
> go test go.uber.org/zap/...
五、降级项目依赖库版本
> # 列出某三方库的所有版本号
> go list -m -versions github.com/Shopify/sarama
> # 降级库到特定版本
> go get -v github.com/Shopify/sarama@v1.12.0
> # 检查降级结果
> go list -m all
> # 运行单元测试保证代码运行正常,这会测试所有库,包括官方库
> go test -short all
六、三方库问题修复工作流
> # 一、clone三方库源码
> git clone https://github.com/Shopify/sarama /tmp/sarama
> cd /tmp/sarama
> saramaVersion=$(cd /tmp/sarama && go list -m -f "{{.Version}}" Shopify/sarama)
> echo ${saramaVersion}
> git checkout -b sarama_fix ${saramaVersion}
> # 二、开始本地修改三方库
> # 三、三方库修改完毕后,进入实际业务工程目录
> cd /tmp/work-project
> 替换业务中的三方依赖到本地路径
> go mod edit -replace 'github.com/Shopify/sarama=../sarama'
> # 查看项目依赖,确保修改正确
> go list -m all
> go build
>
> # 四、把修改提交到三方库做合并
> cd /tmp/sarama
> git remote add mysarama https://github.com/ofree8/mysarama
> git commit -a -m "my change to sarama"
> git push mysarama
> #打tag
> git tag v1.0.1-fix
> git push mysarama v1.0.1-fix
>
> # 五、工程中使用修改过的repo
> cd /tmp/work-project
> go mod edit -replace 'github.com/Shopify/sarama=github.com/ofree8/mysarama@v1.0.1-fix'
> go list -m all
> go build
七、迁移老项目使用go mod
> git clone https://github.com/ofree8/old-project /tmp/old-project
> cd /tmp/old-project
> # 初始化go mod
> go mod init
> # 扫描并下载所有工程依赖
> go mod tidy
>
> # 编译
> GO111MODULE=on go build .