go go mod 依赖管理

十号火星人 · 2020-04-06 10:32:42 · 3738 次点击 · 预计阅读时间 3 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2020-04-06 10:32:42 的文章,其中的信息可能已经有所发展或是发生改变。

1 go mod

Go.mod是Golang1.11版本新引入的官方包管理工具,用于解决记录依赖包具体版本的问题,方便依赖管理,类似于(composer.json 和composer.lock文件)

使用go mod

//linux
vim /etc/profile
export GO111MODULE=on 
source /etc/profile

//windows 建议用cmd管理员身份修改,即时生效
set GO111MODULE=on 

GO111MODULE有三个值:off, on和auto(默认值)。

off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
on,go命令行会使用modules,而不去GOPATH目录下查找。
auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:
当前目录在GOPATH/src之外且该目录包含go.mod文件
当前文件在包含go.mod文件的目录下面

命令列表:
    download    download modules to local cache
    edit        edit go.mod from tools or scripts
    graph       print module requirement graph
    init        initialize new module in current directory
    tidy        add missing and remove unused modules
    vendor      make vendored copy of dependencies
    verify      verify dependencies have expected content
    why         explain why packages or modules are needed

3 设置代理

依赖于 go module 功能,故在第2步中进行了开启

vim /etc/profile
export GOPROXY=https://goproxy.io
或者
$ export GOPROXY=https://mirrors.aliyun.com/goproxy/
source /etc/profile

很多镜像都可以设置阿里云,比如composer等

4 问题汇总

1 依赖包地址

$GOPATH/pkg/mod

2 go.mod 和 go.sum
go.mod存储的是依赖包的版本信息
go.sum /go.mod ,记录每个依赖库的版本和哈希值
官方建议,将两者同时放入git版本控制中,原因不作赘述

3 beego项目迁移
把项目复制到非gopath路径,进入项目
执行go mod init template 初始化go.mod文件,内容类似如下:

module template

go 1.12

require (
    github.com/astaxie/beego v1.12.1
    github.com/go-sql-driver/mysql v1.5.0
    github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect
)

执行go build 下载包,生成go.sum及

[@bx16-77-246 /var/www/gocode/template]# go build
go: finding module for package github.com/astaxie/beego/orm
go: finding module for package github.com/astaxie/beego
go: finding module for package github.com/astaxie/beego/logs
go: finding module for package github.com/astaxie/beego/config
go: finding module for package github.com/go-sql-driver/mysql
go: downloading github.com/astaxie/beego v1.12.1
go: downloading github.com/go-sql-driver/mysql v1.5.0
go: found github.com/astaxie/beego in github.com/astaxie/beego v1.12.1
go: found github.com/go-sql-driver/mysql in github.com/go-sql-driver/mysql v1.5.0
go: downloading golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550
go: downloading gopkg.in/yaml.v2 v2.2.1
go: finding module for package github.com/shiena/ansicolor
go: downloading github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644
go: downloading golang.org/x/net v0.0.0-20190620200207-3b0461eec859
go: downloading golang.org/x/text v0.3.0
go: found github.com/shiena/ansicolor in github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644
[@bx16-77-246 /var/www/gocode/template]# ll
total 15952

此时 nohup ./template & 允许项目的可执行程序即可
至此,迁移完毕。

4 golang unrecognized import path “golang.org/tools” 等类似一系列的问题
确保goproxy设置正确并生效

5 go 1.12版本,发现env没有GO111MODULE
只好升级go 到 1.14.1版本,正常可用


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

本文来自:简书

感谢作者:十号火星人

查看原文:go go mod 依赖管理

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

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