golang开发:环境篇(七) Go mod 使用
Glide用的好好的,为什么要使用Modules
在 Go 1.11 中 ,官方加入package management tool,称为Go Modules。Go mod 没有出现之前,用的最多的包管理器就是 govendor、glide等,这些工具都未达到Go对包管理的预期,比如每次下载,比如墙外下载,比如对GOPATH的依赖,比如多版本的控制等等。然后Go Modules就出现了,它不依赖于GOPATH,只跟项目有关,可以指定代理,可以很容易的通过版本进行控制,摆脱GOPATH的依赖,也为Go以后的自由发展奠定了基础。
使用Go mod 命令管理包
| 命令 | 描述 |
|---|---|
| go init | 在当前目录项目下初始化mod |
| go tidy | 拉取依赖的模块,移除不用的模块 |
| go vendor | 将依赖复制到vendor下 |
| go edit | 编辑go.mod |
| go verify | 验证依赖是否正确 |
其实工作基本上都使用init和tidy就够了。
设置环境变量
GO111MODULE
有三个值,off、on、auto,off 和 on 即关闭和开启,auto 则会根据当前目录下是否有 go.mod 文件来判断是否使用 modules 功能。无论使用哪种模式,module 功能默认不在 GOPATH 目录下查找依赖文件。
GOPROXY
设置代理服务,https://goproxy.io。也可以自己搭代理服务,然后把 GOPROXY 设置为代理服务器的地址。
vim ~/.bash_profile
加入配置的两行
export GO111MODULE=on
export GOPROXY=https://goproxy.io
source ~/.bash_profile
举个栗子
创建项目 myproject
main.go
package main
import (
"github.com/satori/go.uuid"
"fmt"
)
func main() {
uid := uuid.NewV4()
fmt.Println(uid)
}
执行Go mod命令, init 和 tidy
go mod init
go: creating new go.mod: module myproject
go mod tidy
go: finding golang.org/x/tools latest
go: downloading golang.org/x/tools v0.0.0-20200415034506-5d8e1897c761
go: extracting golang.org/x/tools v0.0.0-20200415034506-5d8e1897c761
go: finding gopkg.in/check.v1 latest
go: downloading gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f
go: extracting gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f
go: finding github.com/niemeyer/pretty latest
go: downloading github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e
go: extracting github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e
go: downloading github.com/kr/text v0.1.0
go: extracting github.com/kr/text v0.1.0
编译执行结果
go build main.go
./main
6723138d-ab2c-4de6-b996-732362985548
可以看下Go mod生成的最主要的文件 go.mod
cat go.mod
module myproject
go 1.13
require (
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
github.com/satori/go.uuid v1.2.0
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
)
每个包后面都跟了一个版本。如果想切换分支的话,后面的版本可以任意切换到需要的分支上,比如
require (
github.com/niemeyer/pretty master
github.com/satori/go.uuid v1.2.0
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
)
也可以使用本地代码替换远程代码分支。就可以使用下面的
/data/www/go/src/go.uuid 代替远程分支 github.com/satori/go.uuid。
在go.mod最后一行加上下面的代码
replace github.com/satori/go.uuid => /data/www/go/src/go.uuid
Go mod的使用是不是特别简单。
golang开发:环境篇(七) Go mod 使用的更多相关文章
- golang开发:环境篇(六) Go运行监控Supervisord的使用
为什么要使用Supervisord 17年第一次写Go项目的时候,用Go开发项目倒没没费多大劲,很快就开发完成了.到了在测试环境部署的时候,由于不知道有 Supervisord 这个软件,着实花了些功 ...
- golang开发:环境篇(五)实时加载工具gin的使用
gin 工具是golang开发中非常有用且有效的工具,有效的提高了开发调试go程序的效率. 为什么要使用gin 我们知道golang是编译型语言,这就表示go程序的每次改动,如果需要查看改动结果都必须 ...
- golang开发:环境篇(四)包管理器 glide的使用
glide 是golang项目开发中是特别重要的软件,没有它,golang的项目可能都无法发布. 为什么要使用glide 平时我们开发Go项目的时候,使用第三方的包的时候都直接使用go get 去获取 ...
- Golang开发环境搭建-Vim篇
一.一个干净的环境 找个干净的基础环境,方便确认每个搭建步骤后的效果: Ubuntu 14.04 x86_64 vim version 7.4.52 go version go1.4beta1 lin ...
- Windows下visual studio code搭建golang开发环境
Windows下visual studio code搭建golang开发环境 序幕 其实环境搭建没什么难的,但是遇到一些问题,主要是有些网站资源访问不了(如:golang.org),导致一些包无法安装 ...
- linux golang开发环境配置(离线方式)
<获取开发工具> 到https://www.golangtc.com/download 下载安装包, 根据自己的系统选择合适的开发包,这里选择go.1.9.2.linux-amd6 ...
- window / Linux 下 Golang 开发环境的配置
一直专注于使用python语言进行程序开发,但是却又一直被它的性能问题所困扰,直到遇到了天生支持高并发的Golang,这似乎也成了学习go语言最理所当然的理由.下面介绍下Go语言开发环境搭建的步骤: ...
- Visual Studio Code配置GoLang开发环境
Visual Studio Code配置GoLang开发环境 在Visual Studio Code配置GoLang开发环境 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页: ...
- golang开发环境配置
下载安装 从 https://golang.org/dl/ 下载最新的安装包. windows直接执行exe,按指示进行安装(默认安装目录是:C:\Go) linxu解压后复制到你喜欢目录就行(一般放 ...
随机推荐
- Spring框架——IOC 容器的创建与使用
企业级开发框架 Spring Framework 是整个 Spring 生态的基础,各个模块都是基于 Spring Framework 衍生出来的. Spring 的两大核心机制 IOC 控制翻转.A ...
- 推荐几个来自 MOOCs的 Data Science
数据科学是一个大领域,如果你想成为一个优秀的数据专家,自学是必要的技能. MOOCs是数据科学的主要来源.有许多网站提供了 MOOCs,比如Coursera.Coursera和Udacity都还不错. ...
- 【docker Elasticsearch】Rest风格的分布式开源搜索和分析引擎Elasticsearch初体验
概述: Elasticsearch 是一个分布式.可扩展.实时的搜索与数据分析引擎. 它能从项目一开始就赋予你的数据以搜索.分析和探索的能力,这是通常没有预料到的. 它存在还因为原始数据如果只是躺在磁 ...
- spring 请求静态资源文件
在springMVC项目中使用restful风格写,需要到web.xml配置全拦截. <servlet> <servlet-name>springmvc</ ...
- shell编程之脚本参数$@,$*,$#,$$,$?的含义
#首先按顺序解释各个参数的含义 1.$0 表示脚本的文件名, 具体的路径信息和执行命令时的相对位置有关,例如 sakura@mi-OptiPlex-7050:~/sh$ sh args.sh arg ...
- 北邮OJ103.反转单词 c++/java
103. 反转单词 时间限制 1000 ms 内存限制 65536 KB 题目描述 给出一句英文句子(只由大小写字母和空格组成,不含标点符号,也不会出现连续的空格),请将其中的所有单词顺序翻转 输入格 ...
- 10.map
map Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现 . map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用. map定义 ...
- 机器学习之强化学习概览(Machine Learning for Humans: Reinforcement Learning)
声明:本文翻译自Vishal Maini在Medium平台上发布的<Machine Learning for Humans>的教程的<Part 5: Reinforcement Le ...
- arcgis server10.7修改打印模板后前台调用不生效
在10.5.1及之前的版本中,如果更改打印地图模板,如字体设置,那么直接修改[ArcGIS for Server 安装目录]/Templates/ExportWebMapTemplates下的mxd的 ...
- 使用node.js中遇到的一些小bug
1.BUG Cannot set headers after they are sent to the client 解决:即发出一次请求得到两次或以上的回应时会出现此警告,此时注意查看再在一些条件下 ...