go modules用法

栏目: 后端 · 发布时间: 5年前

内容简介:自从go 1.11开始,go modules已经可以使用,各大开源项目都在迁移中,未来glide、godep等工具均将成为过去式,现在学习正是时候。今天在生产环境实践了go moudles,完全不依赖GOPATH,使用起来很方便,下面记录一下。以前基于GOPATH的玩法,我们下载自己的项目需要执行:

自从 go 1.11开始,go modules已经可以使用,各大开源项目都在迁移中,未来glide、godep等 工具 均将成为过去式,现在学习正是时候。

今天在生产环境实践了go moudles,完全不依赖GOPATH,使用起来很方便,下面记录一下。

前提

  • 不要export GOPATH,使用go modules就不要定义GOPATH,忘掉它即可。
  • 一定要export GO111MODULE=on

GOPATH方案(过时)

以前基于GOPATH的玩法,我们下载自己的项目需要执行:

go get github.com/owenliang/go-ss

项目会下载到目录:

$GOPATH/src/github.com/owenliang/go-ss

如果要需要依赖,那么就继续:

go get github.com/gorilla/websocket

依赖会下载到目录:

$GOPATH/src/github.com/gorilla/websocket

我们代码中引用这个依赖,需要这么写:

import "github.com/gorilla/websocket"

然后go会去$GOPATH下面找这个路径,当然也会依据vendor机制向上查找,就不展开说明了。

那么GOPATH方案的缺点就是:

  • 依赖库没有版本概念,都是master最新代码,因此也诞生了类似glide、godep等主流包管理工具。
  • 开发项目竟然要先创建一个目录当做GOPATH,然后把自己的项目go get到一个很深的目录层级里面去,这太奇怪了!

go module方案(推荐)

使用该方案的时候,我们不需要GOPATH。

先下载项目到go-ss目录:

git clone github.com/owenliang/go-ss

然后直接用IDE打开go-ss目录进行开发即可。

打开go-ss项目后,我们需要先进行go modules的初始化:

go mod init github.com/owenliang/go-ss

这一步很关键,go modules虽然不需要用GOPATH了,但包的完整路径是不能变的,包名依旧叫做github.com/owenliang/go-ss,这样其他项目引用我们的时候还是写import “github.com/owenliang/go-ss”。

执行后就会生成一个go.mod和go.sum文件,其中go.mod明确写了我们包的完整名字:

module github.com/owenliang/go-ss

现在引入依赖和原先没有任何区别:

go get github.com/gorilla/websocket

但是我们观察go.mod,里面其实记录了当前websocket包到底用的是哪个版本:

module gitlab-team.smzdm.com/devops/zdevops/jumpserver
 
require (
	github.com/gorilla/websocket v1.4.0
)

我们在使用go get的时候还可以直接带上版本号,这就是多版本管理:

go get github.com/gorilla/websocket@v1.4.0

安装的包都被golang放在了GOROOT下面,进行了多版本的管理,我们就不需要操心了。

go modules的用法基本就是这样了。

其他

GOPROXY加速

golang很多包都会被GFW墙掉,现在有了go module就可以解决了。

go module支持配置镜像源,从而更快更稳定的完成go get操作,大家只需要export GOPROXY配置一下即可,推荐的源地址: https://goproxy.io/

vendor依赖打包

我喜欢把项目依赖的包一起提交到git中,这样换一台服务器可以直接编译,不需要再去下载包依赖了。

我们在go.mod所在目录,通过命令go mod vendor即可把项目的依赖拷贝到vendor目录下,把vendor提交到git仓库即可。

如果我们用了vendor,那么编译程序的时候仅仅用go build是不够的,默认go modules不会使用vendor目录进行包查找,我们需要这样:

go build -mod vendor

更多学习资料

参考: 《go mod的使用》

博主无私的分享着知识,你愿意送他一顿热腾腾的早餐吗?

go modules用法

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

可伸缩架构

可伸缩架构

【美】Lee Atchison / 张若飞、张现双 / 电子工业出版社 / 2017-7 / 65

随着互联网的发展越来越成熟,流量和数据量飞速增长,许多公司的关键应用程序都面临着伸缩性的问题,系统变得越来越复杂和脆弱,从而导致风险上升、可用性降低。《可伸缩架构:面向增长应用的高可用》是一本实践指南,让IT、DevOps和系统稳定性管理员能够了解到,如何避免应用程序在发展过程中变得缓慢、数据不一致或者彻底不可用等问题。规模增长并不只意味着处理更多的用户,还包括管理更多的风险和保证系统的可用性。作......一起来看看 《可伸缩架构》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

html转js在线工具
html转js在线工具

html转js在线工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具