go module 基本使用
前言
go的版本以至1.13,一直以来令人诟病的依赖管理也有了官方的方向,但是看了一下目前很多blog文章还是比较老的.
所以这里对 go mod 做一个大致的说明
正文
前提
go版本为1.13及以上
官方文档
如果你想更深层次的了解GO MODULE的意义及开发者们的顾虑,可以直接访问官方文档(EN)
https://github.com/golang/go/wiki/Modules
go module介绍
go module是go官方自带的go依赖管理库,在1.13版本正式推荐使用
go module可以将某个项目(文件夹)下的所有依赖整理成一个 go.mod 文件,里面写入了依赖的版本等
使用go module之后我们可不用将代码放置在src下了
具体的请往下看
开启go module
go在1.13版本默认是auto,代表 当项目在 GOPATH/src 外且项目根目录有 go.mod 文件时,开启 go module.
也就是说,如果你不把代码放置在 GOPATH/src 下则默认使用 MODULE 管理.
不好意思看错了,1.13+的版本判断开不开启MODULE的依据是根目录下有没有go.mod文件
我们也可手动更改为 on(全部开启)/off(全部不开启)
这里演示设置为 on
windows:
set GO111MODULE=on
mac:
export GO111MODULE=on
然后输入
go env
查看 GO111MODULE 选项
为 on 代表修改成功
GO PROXY
go module 的目的是依赖管理,所以使用 go module 时你可以舍弃 go get 命令(但是不是禁止使用, 如果要指定包的版本或更新包可使用go get,平时没有必要使用)
因go的网络问题, 所以推荐使用 goproxy.cn 设置详见
https://github.com/goproxy/goproxy.cn/blob/master/README.zh-CN.md
初始化
为你的项目第一次使用 GO MODULE(项目中还没有go.mod文件)
进入你的项目文件夹
cd xxx/xxx/test/
初始化 MODULE
go mod init test(test为项目名)
我们会发现在项目根目录会出现一个 go.mod 文件
注意,此时的 go.mod 文件只标识了项目名和go的版本,这是正常的,因为只是初始化了
检测依赖
go mod tidy
tidy会检测该文件夹目录下所有引入的依赖,写入 go.mod 文件
写入后你会发现 go.mod 文件有所变动
例如:
module test go 1.13 require (
github.com/gin-contrib/sessions v0.0.1
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/gin-gonic/gin v1.4.0
github.com/go-redis/redis v6.15.6+incompatible
github.com/go-sql-driver/mysql v1.4.1
github.com/golang/protobuf v1.3.2 // indirect
github.com/jinzhu/gorm v1.9.11
github.com/json-iterator/go v1.1.7 // indirect
github.com/kr/pretty v0.1.0 // indirect
github.com/mattn/go-isatty v0.0.10 // indirect
github.com/sirupsen/logrus v1.2.0
github.com/ugorji/go v1.1.7 // indirect
golang.org/x/sys v0.0.0-20191025021431-6c3a3bfe00ae // indirect
gopkg.in/yaml.v2 v2.2.4
)
此时依赖还是没有下载的
下载依赖
我们需要将依赖下载至本地,而不是使用 go get
go mod download
如果你没有设置 GOPROXY 为国内镜像,这步百分百会夯住到死
此时会将依赖全部下载至 GOPATH 下,会在根目录下生成 go.sum 文件, 该文件是依赖的详细依赖, 但是我们开头说了,我们的项目是没有放到 GOPATH 下的,那么我们下载至 GOPATH 下是无用的,照样找不到这些包
导入依赖
go mod vendor
执行此命令,会将刚才下载至 GOPATH 下的依赖转移至该项目根目录下的 vendor(自动新建) 文件夹下
此时我们就可以使用这些依赖了
GOLAND设置开启 GO MODULE
可能是因为 GO MODULE 功能还需完善,GOLAND默认是关闭该功能的,我们需要手动打开(不排除之后更新会不会改成默认开启)
依赖更新
这里的更新不是指版本的更新,而是指引入新依赖
依赖更新请从检测依赖部分一直执行即可,即
go mod tidy
go mod download
go mod vendor
新增依赖
有同学会问,不使用 go get ,我怎么在项目中加新包呢?
直接项目中 import 这个包,之后更新依赖即可
在协作中使用 GOMODULE
要注意的是, 在项目管理中,如使用git,请将 vendor 文件夹放入白名单,不然项目中带上包体积会很大
git设置白名单方式为在git托管的项目根目录新建 .gitignore 文件
设置忽略即可.
但是 go.mod 和 go.sum 不要忽略
另一人clone项目后在本地进行依赖更新(同上方依赖更新)即可
GOMODULE常用命令
go mod init # 初始化go.mod
go mod tidy # 更新依赖文件
go mod download # 下载依赖文件
go mod vendor # 将依赖转移至本地的vendor文件
go mod edit # 手动修改依赖文件
go mod graph # 打印依赖图
go mod verify # 校验依赖
go module 基本使用的更多相关文章
- Android Studio 编译单个module
前期自己要把gradle环境变量配置好 在Terminal中gradle命令行编译apk 输入gradle assembleRelease 会编译全部module编译单个modulecd ./xiru ...
- ABP源码分析三:ABP Module
Abp是一种基于模块化设计的思想构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Modu ...
- nodejs模块中exports和module.exports的区别
通过Node.js的官方API可以看到Node.js本身提供了很多核心模块 http://nodejs.org/api/ ,这些核心模块被编译成二进制文件,可以require('模块名')去获取:核心 ...
- ES6之module
该博客原文地址:http://www.cnblogs.com/giggle/p/5572118.html 一.module概述 JavaScript一直没有模块体系,但是伴随着ES6的到来,modul ...
- [python] CSV read and write using module xlrd and xlwt
1. get data from csv, skip header of the file. with open('test_data.csv','rb,) as csvfile: readCSV = ...
- Yii2.0.7 限制user module登录遇到的问题
在Yii2.0.6的时候我是在以下文件通过以下方法实现的. frontend/modules/user/Module.php namespace frontend\modules\user; clas ...
- Android Studio导入github下载的project和module
前言:我们以前eclispe时代, 经常都是跑到github浏览第三方开源资源,然后下载下来,运行一下sample之类的,学习没有接触的第三方安卓库,但是到了Android Studio,在githu ...
- Android Studio导入Project、Module的正确方法
Gradle Project项目.Module模块导入 最近看到网上很多人在抱怨,Android Studio很难导入github上下载下来的一些项目,主要包括: 1.导入就在下载Gradle2.根本 ...
- ImportError: No module named 'requests'
补充说明: 当前环境是在windows环境下 python版本是:python 3.4. 刚开始学习python,一边看书一边论坛里阅读感兴趣的代码, http://www.oschina.net/c ...
- android studio 中移除module和恢复module
一.移除Android Studio中module 在Android Studio中想要删除某个module时,在Android Studio中选中module,右键发现没有delete,如图: An ...
随机推荐
- 团队作业4-Day6
团队作业4-Day6 项目git地址 1. 站立式会议 2. 项目燃尽图 3. 适当的项目截图 4. 代码/文档签入记录(部分) 5. 每人每日总结 吴梓华:今日修复了图片显示BUG,补充了排位模式出 ...
- 一文打尽PWM协议、PPM协议、PCM协议、SBUS协议、XBUS协议、DSM协议 | STM32的通用定时器TIM3实现PPM信号输出
PWM.PPM.PCM.SBUS.XBUS.DSM都是接收机与其他设备通信的协议. 请注意这里不要将遥控器和接收机之间的协议混淆.遥控器和接收机之间会采用某种协议来互相沟通,这些协议往往各个厂牌各自有 ...
- AtCoder Regular Contest 108
Contest Link Official Editorial A - Sum and Product Given are integers \(S\) and \(P\) . Is there a ...
- 【题解】「CF1373B」01 Game
这题好水,就是简单的模拟+字符串. \(\sf Translation\) 给定一个 \(01\) 串,如果 \(0\) 出现的次数和 \(1\) 出现的次数的最小值是奇数,输出 DA ,否则输出 N ...
- 【学习笔记】使用 bitset 求解较高维偏序问题
求解五维偏序 给定 \(n(\le 3\times 10^4)\) 个五元组,对于每个五元组 \((a_i, b_i, c_i, d_i, e_i)\),求存在多少个 \(1\le j\le n\) ...
- (干货)构建镜像之docker commit
Docker提供了两种构建镜像的方法:docker commit命令喝Dockerfile构建文件. docker commit 不推荐 (1).这是手工构建镜像的方式,容易出错,效率低且可重复性 ...
- rsync+inotify-tools实时备份脚本
1.1 实时备份 1.需求分析: 为什么要实时复制 因为nfs是单点非常的不安全 而通过定时任务备份会造成数据丢失 这是就需要需要实时备份 2实时方案 1).搭建好服务端backup与客户端nfs的 ...
- 浏览器开发者工具network详解
General概诉 请求链接 Request URL: 请求方式 Request Method: 代码状态 Status Code: 远程地址 Remote Address: 引用协议 用于过滤 Re ...
- Docker(一):Docker安装
简介 Docker是dotcloud公司开源的一款产品,主要基于PAAS平台为开发者提供服务.是解决运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术. Docker组件 ...
- Web服务器-服务器开发-返回浏览器需要的页面 (3.3.2)
@ 目录 1.说明 2.代码 关于作者 1.说明 使用正则表达式,匹配客户端的请求头 获取到请求的路径 返回对应请求路径的文字 可以使用打开对应文件的方式去返回对应的文件 2.代码 from sock ...