[系列] 使用 go modules 包管理工具(一)
概述
我想实现一个开箱即用的 API 框架的轮子,这个轮子是基于 Gin 基础上开发的。
为什么是开箱即用,它会集成哪些功能?

以上功能点,都是常用的,后期可能还会增加。
废话不多说,咱们开始吧。
创建一个项目,咱们首先要考虑一个依赖包的管理工具。
常见的包管理有,dep、go vendor、glide、go modules 等。
最开始,使用过 dep,当时被朋友 diss 了,推荐我使用 go modules 。
现在来说一下 go modules ,这个是随着 Go 1.11 的发布和我们见面的,这是官方提倡的新的包管理。
说一个环境变量:GO111MODULE,默认值为 auto 。
当项目中有 go.mod 时,使用 go modules 管理,反之使用 旧的 GOPATH 和 vendor机制。
如果就想使用 go modules ,可以将 GO111MODULE 设置为 on 。
直接上手吧。
初始化
咱们在 GOPATH 之外的地方,新建一个空文件夹 go-gin-api 。
cd go-gin-api && go mod init go-gin-api
输出:
go: creating new go.mod: module go-gin-api
这时目录中多一个 go.mod 文件,内容如下:
module go-gin-api
go 1.12
到这,go mod 初始化就完成,接下来添加依赖包 - gin。
添加依赖包
在目录中创建一个 main.go 的文件,放上如下代码:
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080
}
这代码没什么特别的,就是官方的入门Demo。
接下来,开始下载依赖包。
go mod tidy
执行完成后,看一下 go.mod 文件:
module go-gin-api
go 1.12
require github.com/gin-gonic/gin v1.4.0
这时,看到新增一个 gin v1.4.0 的包。
还生成了一个 go.sum 的文件,这个文件可以暂时先不管。
这时发现了 2 个问题。
1、目录中没发现 gin 包,包下载到哪了?
下载到了 GOPATH/pkg/mod 目录中。
2、GoLand 编辑器中关于 Gin 的引用变红了?
在这里编辑器需要设置一下,如图:

点击 Apply 和 OK 即可。
如果这招不灵,还可以执行:
go mod vendor
这个命令是将项目依赖的包,放到项目的 vendor 目录中,这肯定就可以了。
go mod 命令
go mod tidy
拉取缺少的模块,移除不用的模块。
我常用这个命令。
go mod vendor
将依赖复制到vendor下。
我常用这个命令。
go mod download
下载依赖包。
go mod verify
检验依赖。
go mod graph
打印模块依赖图。
其他命令,可以执行 go mod ,查看即可。
小结
这篇文章,分享了 go modules 的使用。
- 使用 go modules 从零搭建一个项目。
- GoLand 编辑器使用 go modules。
今天就到这了,下一篇文章开始搭建 API 项目了,写参数验证。
源码地址
https://github.com/xinliangnote/go-gin-api
[系列] 使用 go modules 包管理工具(一)的更多相关文章
- 使用 go modules 包管理工具(一)
概述 我想实现一个开箱即用的 API 框架的轮子,这个轮子是基于 Gin 基础上开发的. 为什么是开箱即用,它会集成哪些功能? 以上功能点,都是常用的,后期可能还会增加. 废话不多说,咱们开始吧. 创 ...
- 前端工程化系列[01]-Bower包管理工具的使用
本文主要介绍前端开发中常用的包管理工具Bower,具体包括Bower的基本情况.安装.使用和常见命令等内容,最后还介绍了依赖树管理的常见方式以及Bower采用的策略并进行了比较. 1.1 关于Bowe ...
- Python黑帽编程1.3 Python运行时与包管理工具
Python黑帽编程1.3 Python运行时与包管理工具 0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and ...
- Python 包管理工具解惑
Python 包管理工具解惑 本文链接:http://zengrong.net/post/2169.htm python packaging 一.困惑 作为一个 Python 初学者,我在包管理上感到 ...
- 怎样安装pip--python的包管理工具
pip是python的包管理工具,使用它来安装python的模块很方便. pip支持的操作系统:Unix/Linux, OS X, and Windows. 支持的python版本号:2.6, 2.7 ...
- Linux之包管理工具总结[RPM/DPKG]-[YUM/APT]
0.关键词解释 RPM:Red Hat Package Manager(原名),RPM Package Manager(现名,递归缩写,类似于GNU的命名); 解释:RPM软件包管理器 YUM:Yel ...
- 转载:Python 包管理工具解惑
Python 包管理工具解惑 本站文章除注明转载外,均为本站原创或者翻译. 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商: 本站部分原创和翻译文章提供m ...
- Python的包管理工具
Python的包管理工具 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么使用包管理 Python的模块或者源文件直接可以复制到目标项目目录中,就可以导入使用了. 但是为了 ...
- golang包管理工具
软件开发中,不可避免的会使用到第三方库,因此包管理工具可以极大的方便开发者管理第三方依赖,避免掉入"依赖地狱". 作为google强大背书的golang语言,golang官方包管理 ...
随机推荐
- 小代学Spring Boot之自定义Starter
想要获取更多文章可以访问我的博客 - 代码无止境. 上一篇小代同学在Spring Boot项目中配置了数据源,但是通常来讲我们访问数据库都会通过一个ORM框架,很少会直接使用JDBC来执行数据库操作的 ...
- echarts在react项目中的使用
数据可视化在前端开发中经常会遇到,万恶的图表,有时候总是就差一点,可是怎么也搞不定. 别慌,咱们一起来研究. 引入我就不多说了 npm install echarts 对于基础的可视化组件,我一般采用 ...
- 《VR入门系列教程》之8---GearVR
高端移动虚拟现实设备---三星GearVR Oculus Rift也许是虚拟现实头显的典范,但是它还是存在许多问题.首先,它需要基于一个具有强大图形计算能力的计算机,而使用一般的笔记本.苹果A ...
- java - tcp如何保证传输的可靠性和有序性
TCP提供的是一种面向连接的,可靠性的字节流服务. 可靠性: 1.应用数据被TCP划分为最适合发送的数据包: 2.在TCP发送一个数据块后,将启动一个定时器,用以接收目的端的确认信息,若不能及时得到确 ...
- @Validated和@Valid的区别?校验级联属性(内部类)
每篇一句 NBA里有两大笑话:一是科比没天赋,二是詹姆斯没技术 相关阅读 [小家Java]深入了解数据校验:Java Bean Validation 2.0(JSR303.JSR349.JSR380) ...
- SSD+HDD 安装ubuntu16.04+win7双系统
本人电脑是联想天逸100 前段时间把光驱拆了加了一个128G的SSD 顺便把SSD装上了win7 机械硬盘500G放资料和一般软件之类的 后来想要用到ubuntu 就在官网下载ubuntu1 ...
- 在Linux - Centos上安装Python3(上)
必看内容 在Linux上安装Python常用的2种方法 1.Python源码编译安装,有点复杂,适合老司机 2.从EPEL/IUS仓库安装,新手建议使用些方法,比较简单,目前2019-07-31提供最 ...
- EF Core的Code First 基础
一.创建实体类与映射类 通过NuGet引用Microsoft.EntityFrameworkCore 1.创建实体类 Code First可以通过为实体类字段添加相应特性,来创建对应的字段类型等,举例 ...
- cesium学习——cesium中的坐标
一.坐标展现形式 在cesium中,对于坐标数值单位有三种:角度.弧度和坐标值 1.角度 角度就是我们所熟悉的经纬度,对于地球的坐标建立如下: 图中以本初子午线作为x和z的面,建立了一个空间坐标系.可 ...
- Java中Timer和TimerTask来实现计时器循环触发
package xian; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.Fi ...