Go包管理最佳实践(2019/3)
平仄_pingze · · 4427 次点击 · · 开始浏览Golang的包管理经过了多种工具的演变,从go vendor,到godep
),再到dep。
这里使用的是从go v1.11开始支持的go Modules。
Go Modules具有一些优点:
- 不必须将项目目录放在GOPATH中
- 不使用vendor目录,而是统一安装到
$GOPATH/pkg/mod/cache - build/run时,自动析出项目import的包并安装
使用方法:
初始化
在已有的项目目录中,使用go mod init <包名>初始化。
包名通常类似github.com/golang/dep这种格式。
如果包内有自引用,则包名需要和包内自引用名相同,才能正常导入。
这时项目中生成一个go.mod文件。build/run
直接执行go build/run,会发现项目涉及的包被自动安装了。
这时项目中新增go.sum文件。原来的go.mod中增加了依赖项。
注意:
国内使用时,golang.org/x/crypto等包可能装不上。
可以设置Go Module Proxy解决:
export GOPROXY="https://athens.azurefd.net"
(这里使用了微软提供的代理)
示例
通过这种方式,很容易运行起来一个互联网上的Go项目。比如:
git clone https://github.com/snowlyg/IrisApiProject.git
cd IrisApiProject/
go mod init IrisApiProject
go build .
./IrisYouQiKangApi.exe~
其它
有些库使用了cgo,需要gcc编译器。
如果是在windows下,需要自行安装gcc。注意,golang只支持mingw,不能使用cygwin。
对于x64 windows:
- 下载mingw-w64
- 安装之。注意选择 Architecture=x86_64, Threads=posix, Exception=seh。
- 配置安装目录下的bin目录到环境变量。
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
Golang的包管理经过了多种工具的演变,从go vendor,到godep
),再到dep。
这里使用的是从go v1.11开始支持的go Modules。
Go Modules具有一些优点:
- 不必须将项目目录放在GOPATH中
- 不使用vendor目录,而是统一安装到
$GOPATH/pkg/mod/cache - build/run时,自动析出项目import的包并安装
使用方法:
初始化
在已有的项目目录中,使用go mod init <包名>初始化。
包名通常类似github.com/golang/dep这种格式。
如果包内有自引用,则包名需要和包内自引用名相同,才能正常导入。
这时项目中生成一个go.mod文件。build/run
直接执行go build/run,会发现项目涉及的包被自动安装了。
这时项目中新增go.sum文件。原来的go.mod中增加了依赖项。
注意:
国内使用时,golang.org/x/crypto等包可能装不上。
可以设置Go Module Proxy解决:
export GOPROXY="https://athens.azurefd.net"
(这里使用了微软提供的代理)
示例
通过这种方式,很容易运行起来一个互联网上的Go项目。比如:
git clone https://github.com/snowlyg/IrisApiProject.git
cd IrisApiProject/
go mod init IrisApiProject
go build .
./IrisYouQiKangApi.exe~
其它
有些库使用了cgo,需要gcc编译器。
如果是在windows下,需要自行安装gcc。注意,golang只支持mingw,不能使用cygwin。
对于x64 windows:
- 下载mingw-w64
- 安装之。注意选择 Architecture=x86_64, Threads=posix, Exception=seh。
- 配置安装目录下的bin目录到环境变量。