go1.13 mod 实践和常见问题
实践建议
0,go mod 要求所有依赖的 import path 的path 以域名开头,如果现有项目转1.13的go mod 模式,且不是以域名开头则需要修改。
eg: code.be.mingbai.com/tools/any_test_del_free
1, 既然已经更新到1.13了,建议直接设置GO111MODULE="on" ,即开启go mod 模式。因为这也是以后的主流,path会慢慢的消失。
go env -w GO111MODULE=on
2,给go mod 设置代理, 并添加私有域名
go env -w GOPROXY=http://goproxy.cn,direct
go env -w GOPRIVATE=*.mingbai.com
私有域名的配置会让go mod 不走代理,而是用版本控制工具(git)的方式去拉去依赖。解决拉内网或者本地代码的问题。
3,新建项目,或者是已有项目转为go mod 模式的 init 建议
go mod init 域名/组名/项目名
eg: code.be.mingbai.com/tools/any_test_del_free
4,sdk 发布v2、v3 等版本,使其可用于1.13模式的依赖
参看 常见问题 第4条。
常见问题
1,报错: XXXX found,but does not contain package XXXX
如果不止一处报错,可以检查下 go mod init ‘name’ , 的name 是否为 域名/组名/项目名(比如code.be.mingbai.com/tools/soa) 的严格模式。如果不是可以改为这种模式再试一下。
如果仅一两处报错,还有可能是所引用的包有问题,建议检查包的目录结构。
如果是已有项目升级到go1.13,还有可能是新依赖包的的版本大范围不对。从现有的依赖文件里(比如glide.lock)导入依赖版本可以解决。
2, 报错: malformed module path "XXXX": missing dot in first path element
go1.13 mod 要求import 后面的path 第一个元素,符合域名规范,比如code.be.mingbai.com/tools/soa
即使是本项目下的其他包
如果无法使用域名,可以考虑使用replace,但不建议这样做。
eg: replace code.be.mingbai.com/tools/soa => ../../tools/soa
3,报错: require XXXX: version "v3.2.1" invalid: module contains a go.mod file, so major version must be compatible: should be v0 or v1, not v3
其他包,go1.13,对import有严格的语义要求,导入依赖包的V2或再v2之后的版本,需要在‘import path’ 的path 包好 ‘/v2’ 等字样。
更改import path 后 ,go get 并指定版本如果仍然会报错,执行go mod tidy 会自动更新。(报错原因,有待进一步确认)
如果所依赖的包,没有提供这种依赖方式,可以指定依赖master的最新commit。
eg: go get code.be.mingbai.com/tools/soa@master
@分支名,或者commitId等
4,sdk项目维护方发版,使 sdk 的v2、v3 版本 可用于go1.13 mod 模式的显式依赖
注意: 不使用以下两种发版方式,也可以依赖到v1 以上版本,不过需要通过分支名或者commitId 去引入依赖
eg: go get code.be.mingbai.com/tools/any_test_del_free@c92ca0db
go get code.be.mingbai.com/tools/any_test_del_free@master
显式的两种方式
1,可以直接打标签,发布包新版本和其它包管理工具基本一致,不过打标签之前需要在 go.mod 中写入相应的版本号:
$ go mod edit --module=code.be.mingbai.com/tools/any_test_del_free/v2
$ cat go.mod
module code.be.mingbai.com/tools/any_test_del_free/v2
go 1.13
.......
# 此时使用方的依赖引入:
import (
"code.be.mingbai.com/tools/any_test_del_free/v2/xlog" # 这一行
sw "code.be.mingbai.com/tools/any_test_del_free/xsensitive_words"
)
官方推荐将上述过程在一个新分支来避免混淆,那么类如上述例子可以创建一个 v2 分支,但这个不是强制要求的。
2,还有一种方式发布新版本,那就是在主线版本种加入 v2 文件夹,相应的也需要内置 go.mod 这个文件。
$ mkdri v3
$ .....coding......
$ go mod intit code.be.mingbai.com/tools/any_test_del_free/xsensitive_words/v3
$ go mod tidy
$cat go.mod
module code.be.mingbai.com/tools/any_test_del_free/xsensitive_words/v3
go 1.13
......
$ .......commit, push and so no....
$ tree projectPath.
├── linked_sensor.go
├── README.md
├── sensitive_words.go
├── sensitive_words_test.go
├── sensor.go
└── v3
├── go.mod
├── linked_sensor.go
├── README.md
├── sensitive_words.go
├── sensitive_words_test.go
└── sensor.go
# 此时使用方的依赖引入:
import (
"code.be.mingbai.com/tools/any_test_del_free/v2/xlog"
sw "code.be.mingbai.com/tools/any_test_del_free/xsensitive_words/v3" # 这一行
)
```
go1.13 mod 实践和常见问题的更多相关文章
- 【linux】【Go】Centos7安装go1.13环境
前言 Go(又称Golang)是Google开发的一种静态强类型.编译型.并发型,并具有垃圾回收功能的编程语言. 罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pi ...
- Go1.13 标准库的 http 包爆出重大 bug,你的项目中招了吗? 原创: 王亚楼 Go语言中文网 今天
Go1.13 标准库的 http 包爆出重大 bug,你的项目中招了吗? 原创: 王亚楼 Go语言中文网 今天
- centos7.5上安装go1.13.4
一.安装 1.下载go1.13.4.linux-amd64.tar.gz 先进入官网https://golang.google.cn/ 再 https://golang.google.cn/doc/i ...
- 离线批量数据通道Tunnel的最佳实践及常见问题
基本介绍及应用场景 Tunnel是MaxCompute提供的离线批量数据通道服务,主要提供大批量离线数据上传和下载,仅提供每次批量大于等于64MB数据的场景,小批量流式数据场景请使用DataHub实时 ...
- 升级安装go1.13.5
运行文件时报错 verifying github.com/mattn/go-isatty@v0.0.10-0.20190818123653-bf9a1dea1961/go.mod: github.co ...
- 个人安装GO1.13.6版本指南手册之搭建环境
因好奇而走进go语言,让你不在只闻其声,不见其形. https://golang.org/doc/install:这里是go语言的官网文档.吃不透英文,终究会被限制在有限的区域,一词词的吃透. 安装包 ...
- SQLite多线程读写实践及常见问题总结
多线程读写 SQLite实质上是将数据写入一个文件,通常情况下,在应用的包名下面都能找到xxx.db的文件,拥有root权限的手机,可以通过adb shell,看到data/data/packagen ...
- android开发之路13(实际开发常见问题及解决办法ING)
1.DDMS下无法浏览SDcard? 在做音乐播放器的时候,想通过eclipse中的DDMS视图将音频文件push到sd卡中,发现总是报错 :Failed to push selection: Rea ...
- golang1.13中重要的新特新
本文索引 语言变化 数字字面量 越界索引报错的完善 工具链改进 GOPROXY GOSUMDB GOPRIVATE 标准库的新功能 判断变量是否为0值 错误处理的革新 Unwrap Is As gol ...
随机推荐
- python requirements.txt的创建及使用
要求文件(requirements.txt)是安装包的依赖项及版本的记录文件. pip: 创建 (venv) $ pip freeze >requirements.txt 使用 (venv) $ ...
- Java Import的使用
这里根据上一篇中ClassObject.java的例子改编的:https://www.cnblogs.com/jizizh/p/11938574.html 一.创建ClassObjectImport. ...
- vue 解决跨域
先上报错 以表尊重 在vue中 找到 config文件夹中的 index.js文件 配置更改如下 proxyTable: { '/api': { target: 'http://47.240.11. ...
- 2019-10-30,Hack The Box 获取邀请码
一.快速获取邀请码方法 1,使用curl请求下面的地址curl -X POST https://www.hackthebox.eu/api/invite/generate 2,在返回结果的code部分 ...
- java引用知识
最近从新拜读<深入理解Java虚拟机:JVM高级特性与最佳实践>这本书,看到有关引用的相关知识,以前没有好的习惯,这次看完在博客上记录下 引用:如果reference类型中的数据存储的数值 ...
- Linux的awk命令详解
awkawk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,默认以空格为分隔符将每行切片,切开的部分再 ...
- 程序员的算法课(11)-KMP算法
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/de ...
- 【Android - 控件】之MD - NavigationView的使用
NavigationView是Android 5.0新特性——Material Design中的一个布局控件,可以结合DrawerLayout使用,让侧滑菜单变得更加美观(可以添加头部布局). Nav ...
- vsftp安装和配置
2013-10-10 10:49:48| 分类: Linux|举报|字号 订阅 源码下载地址:ftp://vsftpd.beasts.org/users/cevans/untar/ 1. ...
- CSS浮动和各种定位
CSS定位 css定位机制 文档流:元素按照在HTML中的位置决定排布的过程 块级元素是从上到下的,内联元素是从左到右的 浮动 position布局 position css position属性用于 ...