go mod

go buildin package manager.

go mod是go语言内置的包管理工具,集成在go tool中,安装好go就可以使用。

要求: go version >= 1.11

官方文档: https://tip.golang.org/cmd/go...

环境变量

# 通过环境变量GOPROXY设置代理
export GOPROXY=https://goproxy.io # go mod功能开关,默认是auto,在gopath中不启用
# 可设置为on强制启用
export GO111MODULE=on

go mod init

初始化

update:init现在已经做了优化
go mod init <module-name>


init报错outside gopath no import comments

# 方法一 手动创建go.mod文件, 写入module xxx
echo 'module xxx' > go.mod # 方法二 main包加入import声明
package main // import "xxx"

go mod download

下载依赖

go mod tidy

同步依赖包,添加需要的,移除多余的

go mod vendor

将依赖包放入vendor

go get 下载/升级依赖

go mod不再下载源码进$GOPATH/src

go mod的下载目录在$GOPATH/pkg/mod,并且是文件权限是只读的-r--r--r--

# tag必须以v开头 v1.2.3格式
go get -u xxx.com/pkg@2.1.0

vendor 模式

go mod是不推荐使用vendor目录的,而是直接使用source或cache中的包。

module mode下默认忽略vendor目录。通过flag-mod=vendor设置vendor模式,依赖只从顶层的vendor中查找。可以通过环境变量GOFLAGS=-mod=vendor来设置flag。

https://github.com/golang/go/...

vendor模式下get报错

goland编辑器勾选vender后会开启vendor模式。

# go get: disabled by -mod=vendor

# mod有三个取值
# mod can be '', 'readonly', or 'vendor'
# 两种赋值方式都可以
-mod=''
-mod ''

replace

让原本依赖的 github.com/repo/pkg 包,实际使用 github.com/your-fork/pkg@v。

go mod edit -replace old[@v]=new[@v]

# 如果不是replace本地包,必须带上版本号
go mod edit -replace golang.org/x/crypto=github.com/golang/crypto@v0.0.0-20190621222207-cc06ce4a13d4
# go.mod
replace golang.org/x/crypto => github.com/golang/crypto v0.0.0-20190621222207-cc06ce4a13d4 replace golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4 => github.com/golang/crypto v0.0.0-20190621222207-cc06ce4a13d4

清缓存

go clean -modcache

go.mod & go.sum

go.mod:依赖列表和版本约束。

go.sum:记录module文件hash值,用于安全校验。

最佳实践

  • go mod不推荐使用vendor,不要将vendor提交到版本控制。
  • CICD等场景下载vendor不方便时,使用vendor可能会更好。也可以考虑搭建nexus golang repo。

golang内置包管理工具go mod简明教程的更多相关文章

  1. godep 包管理工具

    godep是解决包依赖的管理工具 安装 go get github.com/tools/godep 成功安装后,在GOPATH的bin目录下会有一个godep可执行的二进制文件,后面执行的命令都是用这 ...

  2. go包管理工具glide使用方法

    golang没有官方最佳管理方案,在go的世界里存在大量的自制解决方案. go语言的包是没有中央库统一管理的,通过使用go get命令从远程代码库(github.com,goolge code 等)拉 ...

  3. golang包管理工具

    软件开发中,不可避免的会使用到第三方库,因此包管理工具可以极大的方便开发者管理第三方依赖,避免掉入"依赖地狱". 作为google强大背书的golang语言,golang官方包管理 ...

  4. Golang包管理工具glide简介

    Golang包管理工具glide简介 前言 Golang是一个十分有趣,简洁而有力的开发语言,用来开发并发/并行程序是一件很愉快的事情.在这里我感受到了其中一些好处: 没有少了许多代码格式风格的争论, ...

  5. Nodejs-内置核心模块&npm包管理工具

    1.核心模块的意义 如果只是在服务器运行JavaScript代码,其实意义不大(浏览器就可以解决)因为无法实现功能(读写文件,访问网络) Node的用处在于本身还提供了一系列的功能模块,用于与操作系统 ...

  6. Golang学习--包管理工具glide

    上一篇文章中我们已经成功的运行了go的代码,这是我们迈出的最基础的一步. 一个项目通常会依赖很多外部的库,当依赖的库比较多的时候,手工管理就会比较麻烦,这个时候就需要包管理工具出场了,帮你管理好所有依 ...

  7. Golang Vendor 包管理工具 glide 使用教程

    Glide 是 Golang 的 Vendor 包管理器,方便你管理 vendor 和 verdor 包.类似 Java 的 Maven,PHP 的 Composer. Github:https:// ...

  8. golang包管理工具及环境管理工具;如何下载外网的依赖包

    简介: golang的包管理工具类似于java的maven.python的pip.js的npm,可以实现依赖包的统一管理:有很多:govendor.godep.glide,挑一个自己喜欢的用吧.mac ...

  9. Golang语言系列-13-常用内置包

    常用内置包 net/http包 http请求和响应 http服务端 main.go文件 package main import ( "fmt" "io/ioutil&qu ...

  10. Helm包管理工具(简介、安装、方法)

    认识Helm 每次我们要部署一个应用都需要写一个配置清单(维护一套yaml文件),但是每个环境又不一样.部署一套新的环境成本是真的很高.如果我们能够使用类似于yum的工具来安装我们的应用的话那就太好了 ...

随机推荐

  1. KDB_Database_Link 使用介绍

    kdb_database_link 是 KingbaseES 为了兼容oracle 语法而开发的跨数据库访问扩展,可用于访问KingbaseES, Postgresql , Oracle .以下分别介 ...

  2. 痞子衡嵌入式:理解i.MXRT中FlexSPI外设lookupTable里配置访问行列混合寻址Memory的参数值

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT中FlexSPI外设lookupTable里配置访问行列混合寻址Memory的参数值. 关于 FlexSPI 外设的 loo ...

  3. 《Java基础——选择语句》

    Java基础--选择语句       1. if语句; 规则: 1. 首先计算表达式的值. 2. 若表达式为真,则执行对应语句,为假则不执行.   格式一: if(表达式) 语句;//多个语句可用{} ...

  4. Java中的StringBuilder和StringBuffer适用场景

    我不知道为什么这个这么老的问题会出现在我的时间线上,看了一下回答,大多是2012,2013年的回答,照说那个年代,有些历史故事还很新鲜,却不知道为什么没有一个答案说到点子上. stringbuffer ...

  5. ES配置生成SSL使用的证书

    cd /usr/local/elasticsearch/bin/ ./elasticsearch-certgen ##################################### Pleas ...

  6. 使用 Loki 进行日志报警(二)

    转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247492374&idx=1&sn=d09f6db623 ...

  7. 索引模板和动态索引模板 (Index Template和Dynamic Template)

    相关阅读 Index Templates https://www.elastic.co/guide/en/elasticsearch/reference/7.1/indices-templates.h ...

  8. 【SDOI2013】 项链 题解

    Solution 将原问题分为两个问题求解. Part 1 首先求珍珠的种类数. 设\(f_i\)表示满足\(gcd = i\)的本质不同珍珠个数, \(g_i\)表示满足\(gcd\)为\(i\)的 ...

  9. IDEA快速生成数据库表的实体类

    IDEA连接数据库 IDEA右边侧栏有个DataSource,可以通过这个来连接数据库,我们先成功连接数据库 点击进入后填写数据库进行连接,注意记得一定要去Test Connection 确保正常连接 ...

  10. Linux基础_3_文件/文件夹权限管理

    注:权限遮罩码: 控制用户创建文件和文件夹的默认安全设置,文件默认权限为666-umask的值,文件夹默认权限为777-umask的值. root默认0022,普通用户默认0002. 文件的默认权限不 ...