使用 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
}
这里我还准备了一分学习图和资料,如下:

链接:https://pan.baidu.com/s/1v5gm7n0L7TGyejCmQrMh2g 提取码:x2p5
免费分享,但是X度限制严重,如若链接失效点击链接或搜索加群 群号518475424。
这代码没什么特别的,就是官方的入门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 项目了,写参数验证。
使用 go modules 包管理工具(一)的更多相关文章
- [系列] 使用 go modules 包管理工具(一)
目录 概述 初始化 添加依赖包 go mod 命令 小结 源码地址 概述 我想实现一个开箱即用的 API 框架的轮子,这个轮子是基于 Gin 基础上开发的. 为什么是开箱即用,它会集成哪些功能? 以上 ...
- Python 包管理工具解惑
Python 包管理工具解惑 本文链接:http://zengrong.net/post/2169.htm python packaging 一.困惑 作为一个 Python 初学者,我在包管理上感到 ...
- 转载:Python 包管理工具解惑
Python 包管理工具解惑 本站文章除注明转载外,均为本站原创或者翻译. 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商: 本站部分原创和翻译文章提供m ...
- Python的包管理工具
Python的包管理工具 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么使用包管理 Python的模块或者源文件直接可以复制到目标项目目录中,就可以导入使用了. 但是为了 ...
- golang包管理工具
软件开发中,不可避免的会使用到第三方库,因此包管理工具可以极大的方便开发者管理第三方依赖,避免掉入"依赖地狱". 作为google强大背书的golang语言,golang官方包管理 ...
- Python黑帽编程1.3 Python运行时与包管理工具
Python黑帽编程1.3 Python运行时与包管理工具 0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and ...
- 包管理工具Carthage使用
iOS项目中第三方开源库的工具有Cocoapods和Carthage,swift官方出了一个包管理工具SPM(Swift Package Manager). 首先,大体讲一下Cocoapods和Car ...
- Node包管理工具
Node包管理工具 只是简单的介绍一些工具的使用,有利于开发过程.除了介绍Node包管理工具,还介绍了前端打包工具,前端模块管理工具 Node包管理工具: --npm --cnpm ...
- godep 包管理工具
godep是解决包依赖的管理工具 安装 go get github.com/tools/godep 成功安装后,在GOPATH的bin目录下会有一个godep可执行的二进制文件,后面执行的命令都是用这 ...
随机推荐
- win7搭建本地SonarQube环境进行c#代码分析
1.SonarQube需要正常运行,首先需要安装Java环境,我这里安装的是jdk-8u181版本,可以在下面网站找适的版本去下载安装 https://www.oracle.com/technetwo ...
- Flask--闪现、中间件、多app应用
目录 闪现 源码 案例 中间件 自定义局部中间件 自定义全局装饰器 多app应用 闪现 flask提供了一个非常有用的flash()函数,它可以用来"闪现"需要提示给用户的消息,比 ...
- P5124 Teamwork(DP)
题目: P5124 [USACO18DEC]Teamwork 解析: 动态规划,设\(f[i]\)表示到第\(i\)位的最大值,我们枚举i之前的j个位置\((j<k)\),记录一下这\(j+1\ ...
- MongoDB常用数据库命令第三集
show dbs 查看已经存在的数据库 use 数据库名 切换到指定的数据库(无论数据库是否存在 均可切换成功) db 查看当前数据库 db.getCollectionNames() 查看当前数据库下 ...
- 深入浅出讲解低功耗蓝牙(BLE)协议栈
详解BLE连接建立过程https://www.cnblogs.com/iini/p/8972635.html 详解BLE 空中包格式—兼BLE Link layer协议解析https://www.cn ...
- leetcode之求众数
求众数 给定一个大小为 n 的数组,找到其中的众数. 你可以假设数组是非空的,并且给定的数组总是存在众数. 示例 1: 输入: [3,2,3] 输出: 3 示例 2: 输入: [2,2,1,1,1,2 ...
- redis报错: redis.exceptions.ResponseError: value is not an integer or out of range
问题描述 今天在使用python的redis客户端时碰到了这样的报错:redis.exceptions.ResponseError: value is not an integer or out of ...
- Dubbo启动,调用方法失败【问题:调用超时】
今天,启动dubbo,开始写项目. 在一个调用dubbo里面的一个方法时,程序一直调用,每次显示报红. 很难搞. 问题代码 com.alibaba.dubbo.rpc.RpcException: Fa ...
- Error: EACCES: permission denied, mkdir
今天在全局安装飞冰的时候,出现标题的错误 想到是权限不够的问题,其实飞冰官网也有解决的办法,就是更改npm的默认路径.我之前就是用了更改默认路径的方法,然后后来又恢复了默认路径,所以还是用默认路径加权 ...
- day31_8.12并发编程二线程
一.进程间的通信 在进程中,可以通过Queue队列进行通信,队列有两个特点: 1.先进先出.(先来的数据先被取出) 2.管道式存取.(数据取出一次后就不会在有了) 在python中有以下方法来操作数据 ...