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 使用的更多相关文章

  1. golang开发:环境篇(六) Go运行监控Supervisord的使用

    为什么要使用Supervisord 17年第一次写Go项目的时候,用Go开发项目倒没没费多大劲,很快就开发完成了.到了在测试环境部署的时候,由于不知道有 Supervisord 这个软件,着实花了些功 ...

  2. golang开发:环境篇(五)实时加载工具gin的使用

    gin 工具是golang开发中非常有用且有效的工具,有效的提高了开发调试go程序的效率. 为什么要使用gin 我们知道golang是编译型语言,这就表示go程序的每次改动,如果需要查看改动结果都必须 ...

  3. golang开发:环境篇(四)包管理器 glide的使用

    glide 是golang项目开发中是特别重要的软件,没有它,golang的项目可能都无法发布. 为什么要使用glide 平时我们开发Go项目的时候,使用第三方的包的时候都直接使用go get 去获取 ...

  4. Golang开发环境搭建-Vim篇

    一.一个干净的环境 找个干净的基础环境,方便确认每个搭建步骤后的效果: Ubuntu 14.04 x86_64 vim version 7.4.52 go version go1.4beta1 lin ...

  5. Windows下visual studio code搭建golang开发环境

    Windows下visual studio code搭建golang开发环境 序幕 其实环境搭建没什么难的,但是遇到一些问题,主要是有些网站资源访问不了(如:golang.org),导致一些包无法安装 ...

  6. linux golang开发环境配置(离线方式)

    <获取开发工具>     到https://www.golangtc.com/download 下载安装包, 根据自己的系统选择合适的开发包,这里选择go.1.9.2.linux-amd6 ...

  7. window / Linux 下 Golang 开发环境的配置

    一直专注于使用python语言进行程序开发,但是却又一直被它的性能问题所困扰,直到遇到了天生支持高并发的Golang,这似乎也成了学习go语言最理所当然的理由.下面介绍下Go语言开发环境搭建的步骤: ...

  8. Visual Studio Code配置GoLang开发环境

    Visual Studio Code配置GoLang开发环境 在Visual Studio Code配置GoLang开发环境 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页: ...

  9. golang开发环境配置

    下载安装 从 https://golang.org/dl/ 下载最新的安装包. windows直接执行exe,按指示进行安装(默认安装目录是:C:\Go) linxu解压后复制到你喜欢目录就行(一般放 ...

随机推荐

  1. Spring框架——IOC 容器的创建与使用

    企业级开发框架 Spring Framework 是整个 Spring 生态的基础,各个模块都是基于 Spring Framework 衍生出来的. Spring 的两大核心机制 IOC 控制翻转.A ...

  2. 推荐几个来自 MOOCs的 Data Science

    数据科学是一个大领域,如果你想成为一个优秀的数据专家,自学是必要的技能. MOOCs是数据科学的主要来源.有许多网站提供了 MOOCs,比如Coursera.Coursera和Udacity都还不错. ...

  3. 【docker Elasticsearch】Rest风格的分布式开源搜索和分析引擎Elasticsearch初体验

    概述: Elasticsearch 是一个分布式.可扩展.实时的搜索与数据分析引擎. 它能从项目一开始就赋予你的数据以搜索.分析和探索的能力,这是通常没有预料到的. 它存在还因为原始数据如果只是躺在磁 ...

  4. spring 请求静态资源文件

    在springMVC项目中使用restful风格写,需要到web.xml配置全拦截. <servlet>        <servlet-name>springmvc</ ...

  5. shell编程之脚本参数$@,$*,$#,$$,$?的含义

    #首先按顺序解释各个参数的含义 1.$0  表示脚本的文件名, 具体的路径信息和执行命令时的相对位置有关,例如 sakura@mi-OptiPlex-7050:~/sh$ sh args.sh arg ...

  6. 北邮OJ103.反转单词 c++/java

    103. 反转单词 时间限制 1000 ms 内存限制 65536 KB 题目描述 给出一句英文句子(只由大小写字母和空格组成,不含标点符号,也不会出现连续的空格),请将其中的所有单词顺序翻转 输入格 ...

  7. 10.map

    map Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现 . map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用. map定义 ...

  8. 机器学习之强化学习概览(Machine Learning for Humans: Reinforcement Learning)

    声明:本文翻译自Vishal Maini在Medium平台上发布的<Machine Learning for Humans>的教程的<Part 5: Reinforcement Le ...

  9. arcgis server10.7修改打印模板后前台调用不生效

    在10.5.1及之前的版本中,如果更改打印地图模板,如字体设置,那么直接修改[ArcGIS for Server 安装目录]/Templates/ExportWebMapTemplates下的mxd的 ...

  10. 使用node.js中遇到的一些小bug

    1.BUG Cannot set headers after they are sent to the client 解决:即发出一次请求得到两次或以上的回应时会出现此警告,此时注意查看再在一些条件下 ...