go go mod 依赖管理

语言: CN / TW / HK

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版本,正常可用

分享到: