kaisawind's blog
  • 关于
  • 所有帖子

使用go module管理go package - Thu, Jul 11, 2019

使用go module管理go包并编译

使用go module管理go包并编译

1. 概述

Go语言从1.11开始支持go mod进行包管理,1.12时正式启用。从Go 1.16开始,module模式已成为默认模式。

当前状态: Go Modules已成为Go语言的官方依赖管理方案。推荐使用Go 1.18+版本,支持工作区(workspace)功能。

常用代理:

  • https://goproxy.cn (七牛云)
  • https://goproxy.io
  • https://mirrors.aliyun.com/goproxy/ (阿里云)

2. go mod命令

The commands are:

        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

Use "go help mod <command>" for more information about a command.

3. 从原有的vendor进行迁移

3.1 不删除vendor.json

如果不删除vendor.json,go mod会从json文件读取版本,并进行cache

go mod init
go mod tidy

3.2 删除vendor

删除vendor之后,go mod会遍历代码,获取包然后从远程服务器进行缓存

go mod init
go mod tidy

4. 关于墙

由于众所周知的原因,在大陆访问google的服务会被墙无法访问。 但是go语言又是google开发的语言,所以go语言大多数的包都无法访问。

4.1 使用replace

我们可以使用replace,将google的包替换为我们能访问的服务器上的包

replace (
	cloud.google.com/go => github.com/googleapis/google-cloud-go v0.40.0
	golang.org/x/crypto => github.com/golang/crypto v0.0.0-20190611184440-5c40567a22f8
	golang.org/x/exp => github.com/golang/exp v0.0.0-20190510132918-efd6b22b2522
	golang.org/x/image => github.com/golang/image v0.0.0-20190523035834-f03afa92d3ff
	golang.org/x/lint => github.com/golang/lint v0.0.0-20190409202823-959b441ac422
	golang.org/x/mobile => github.com/golang/mobile v0.0.0-20190607214518-6fa95d984e88
	golang.org/x/net => github.com/golang/net v0.0.0-20190611141213-3f473d35a33a
	golang.org/x/oauth2 => github.com/golang/oauth2 v0.0.0-20190604053449-0f29369cfe45
	golang.org/x/sync => github.com/golang/sync v0.0.0-20190423024810-112230192c58
	golang.org/x/sys => github.com/golang/sys v0.0.0-20190610200419-93c9922d18ae
	golang.org/x/text => github.com/golang/text v0.3.2
	golang.org/x/time => github.com/golang/time v0.0.0-20190308202827-9d24e82272b4
	golang.org/x/tools => github.com/golang/tools v0.0.0-20190612232758-d4e310b4a8a5
	google.golang.org/api => github.com/googleapis/google-api-go-client v0.6.0
	google.golang.org/appengine => github.com/golang/appengine v1.6.1
	google.golang.org/genproto => github.com/google/go-genproto v0.0.0-20190611190212-a7e196e89fd3
	google.golang.org/grpc => github.com/grpc/grpc-go v1.21.1
)

4.2 使用代理(推荐)

Go Modules代理可以加速依赖下载:

# 设置代理
export GOPROXY=https://goproxy.cn,direct

# 或在go.mod中设置
go env -w GOPROXY=https://goproxy.cn,direct

# 多个代理(按顺序尝试)
export GOPROXY=https://goproxy.cn,https://goproxy.io,direct

常用代理列表:

  • goproxy.cn: 七牛云提供,国内速度快
  • goproxy.io: 全球CDN加速
  • 阿里云: mirrors.aliyun.com/goproxy/
  • 官方代理: proxy.golang.org(国内访问可能较慢)

5. 常用命令

# 初始化模块
go mod init <module-name>

# 整理依赖
go mod tidy

# 下载依赖
go mod download

# 查看依赖
go list -m all

# 查看依赖图
go mod graph

# 验证依赖
go mod verify

# vendor模式
go mod vendor

6. go.mod文件说明

module github.com/my/project

go 1.21

require (
    github.com/some/package v1.2.3
)

require (
    github.com/other/package v2.0.0 // indirect
)

replace github.com/old/package => github.com/new/package v1.0.0

exclude github.com/bad/package v1.0.0


辽ICP备2021007608号 | © 2026 | kaisawind

Facebook Twitter GitHub