升级Go新版本,用go.mod 摆脱GOPATH的包管理束缚吧!

ZetaChow晓代码 · · 3406 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

image.png

Golang team在二月末发布了1.12版本,而athens也在3月初发布了v0.3.0版本,新一代的go语言包管理生态体系初见雏形

    最近被glide折腾的生不如死,下载墙外的包的时候就像段誉的六脉神剑一样,时灵时不灵,恰好此时go 1.12发布并且背靠微软的 go module 代理实现 athens发布了0.3.0的更新,为了早日摆脱glide,特对go module和athens做了可用性调研。

01

go module

go 1.11 试验性的引入了go module的概念,初步解决了go语言包管理的难题,talk is cheap, show me the code.

我们新建一个项目 test,test创建了一个grpc客户端并做了一个简单的rpc调用

$ mkdir test && cd test
package main

使用go mod init test命令,会在当前目录下面创建一个go.mod文件

# philchia @ philchia in ~/test [22:36:31]

go.mod中声明了模块的名称和当前模块构建时使用的go版本

google.golang.org/grpc 这个包因为某些原因一般是直接下载不了的,这里我们借助设置 GOPROXY=https://goproxy.io 使用 go module的download protocol来通过一个代理来获取我们的依赖

$ GO111MODULE=on GOPROXY=https://goproxy.io go get google.golang.org/grpc
go: finding google.golang.org/grpc v1.19.0

这样我们的依赖就都下载好了,可以看到多了一个go.sum文件,go.mod文件的内容也发生了改变

$ cat go.mod 

尝试编译我们的main.go

$ go build main.go

bingo! 编译成功

02

athens

使用 https://goproxy.io 这样公共的go module 代理固然可以解决墙外依赖包下载的问题,然而当我们的依赖是放在自建gitlab的私有库内,普通的 go module 代理是没有办法的,这里就要隆重介绍 athens,athens是一个有微软参与和贡献代码的开源go module代理服务。

athens实现了go module download protocol, 并且支持从私有库拉取包。利用docker,可以非常方便的创建一个athens代理服务器。

首先创建两个目录,分别用于存放.netrc文件和作为go module代理的存储

$ pwd

创建一个.netrc文件,写入我们私有库的地址和用户名密码

$ cd athens-netrc

启动 athens 容器

docker run -d -v /Users/goheart/athens-netrc:/root -v /Users/goheart/athens-storage:/var/lib/athens  -e ATHENS_NETRC_PATH=/root/.netrc -e ATHENS_DISK_STORAGE_ROOT=/var/lib/athens    -e ATHENS_STORAGE_TYPE=disk    --name athens-proxy    --restart always    -p 3000:3000    gomods/athens:latest

访问 http://localhost:3000 检查容器是否启动成功

curl http://localhost:3000

配置使用我们本地的athens代理

$ export GOPROXY=http://locaohost:3000

这样我们就可以使用代理服务器来导入私有库中的依赖了One more thing 在没有使用go module的时候,如果在github上fork别人的代码,你自己的分支代码里面的import path有时候会带有原代码库的代码path,使得go代码库对fork的支持很不好,有了gomodule之后,我们代码的import path可以不用包括hostname和github的username, 可以完美支持fork的代码库

本文来源:Go语言之心


Go语言之心

关注和喜爱前沿&有趣开发技术,加入【Hello World!晓代码】

Hello World! 晓代码公众号


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:ZetaChow晓代码

查看原文:升级Go新版本,用go.mod 摆脱GOPATH的包管理束缚吧!

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3406 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传