实践建议

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 实践和常见问题的更多相关文章

  1. 【linux】【Go】Centos7安装go1.13环境

    前言     Go(又称Golang)是Google开发的一种静态强类型.编译型.并发型,并具有垃圾回收功能的编程语言. 罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pi ...

  2. Go1.13 标准库的 http 包爆出重大 bug,你的项目中招了吗? 原创: 王亚楼 Go语言中文网 今天

    Go1.13 标准库的 http 包爆出重大 bug,你的项目中招了吗? 原创: 王亚楼 Go语言中文网 今天

  3. centos7.5上安装go1.13.4

    一.安装 1.下载go1.13.4.linux-amd64.tar.gz 先进入官网https://golang.google.cn/ 再 https://golang.google.cn/doc/i ...

  4. 离线批量数据通道Tunnel的最佳实践及常见问题

    基本介绍及应用场景 Tunnel是MaxCompute提供的离线批量数据通道服务,主要提供大批量离线数据上传和下载,仅提供每次批量大于等于64MB数据的场景,小批量流式数据场景请使用DataHub实时 ...

  5. 升级安装go1.13.5

    运行文件时报错 verifying github.com/mattn/go-isatty@v0.0.10-0.20190818123653-bf9a1dea1961/go.mod: github.co ...

  6. 个人安装GO1.13.6版本指南手册之搭建环境

    因好奇而走进go语言,让你不在只闻其声,不见其形. https://golang.org/doc/install:这里是go语言的官网文档.吃不透英文,终究会被限制在有限的区域,一词词的吃透. 安装包 ...

  7. SQLite多线程读写实践及常见问题总结

    多线程读写 SQLite实质上是将数据写入一个文件,通常情况下,在应用的包名下面都能找到xxx.db的文件,拥有root权限的手机,可以通过adb shell,看到data/data/packagen ...

  8. android开发之路13(实际开发常见问题及解决办法ING)

    1.DDMS下无法浏览SDcard? 在做音乐播放器的时候,想通过eclipse中的DDMS视图将音频文件push到sd卡中,发现总是报错 :Failed to push selection: Rea ...

  9. golang1.13中重要的新特新

    本文索引 语言变化 数字字面量 越界索引报错的完善 工具链改进 GOPROXY GOSUMDB GOPRIVATE 标准库的新功能 判断变量是否为0值 错误处理的革新 Unwrap Is As gol ...

随机推荐

  1. python requirements.txt的创建及使用

    要求文件(requirements.txt)是安装包的依赖项及版本的记录文件. pip: 创建 (venv) $ pip freeze >requirements.txt 使用 (venv) $ ...

  2. Java Import的使用

    这里根据上一篇中ClassObject.java的例子改编的:https://www.cnblogs.com/jizizh/p/11938574.html 一.创建ClassObjectImport. ...

  3. vue 解决跨域

    先上报错 以表尊重 在vue中 找到 config文件夹中的 index.js文件  配置更改如下 proxyTable: { '/api': { target: 'http://47.240.11. ...

  4. 2019-10-30,Hack The Box 获取邀请码

    一.快速获取邀请码方法 1,使用curl请求下面的地址curl -X POST https://www.hackthebox.eu/api/invite/generate 2,在返回结果的code部分 ...

  5. java引用知识

    最近从新拜读<深入理解Java虚拟机:JVM高级特性与最佳实践>这本书,看到有关引用的相关知识,以前没有好的习惯,这次看完在博客上记录下 引用:如果reference类型中的数据存储的数值 ...

  6. Linux的awk命令详解

    awkawk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,默认以空格为分隔符将每行切片,切开的部分再 ...

  7. 程序员的算法课(11)-KMP算法

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/de ...

  8. 【Android - 控件】之MD - NavigationView的使用

    NavigationView是Android 5.0新特性——Material Design中的一个布局控件,可以结合DrawerLayout使用,让侧滑菜单变得更加美观(可以添加头部布局). Nav ...

  9. vsftp安装和配置

    2013-10-10 10:49:48|  分类: Linux|举报|字号 订阅     源码下载地址:ftp://vsftpd.beasts.org/users/cevans/untar/   1. ...

  10. CSS浮动和各种定位

    CSS定位 css定位机制 文档流:元素按照在HTML中的位置决定排布的过程 块级元素是从上到下的,内联元素是从左到右的 浮动 position布局 position css position属性用于 ...