long blogs

进一步有进一步惊喜


  • Home
  • Archive
  • Tags
  •  

© 2025 long

Theme Typography by Makito

Proudly published with Hexo

go-module

Posted at 2020-07-24 笔记 golang 

go module介绍

​ go module 是从1.11版本开始支持的官方包管理工具。不用go module的话,所有的项目必须在gopath下创建,版本依赖无法处理。通过使用go module可以摆脱GoPath开发,可以通过配置go.mod文件来自已定义依赖包的版本。

go module的三种模式

off、on、auto

模式 说明
off 关闭,使用在GoPath下开发的模式
on 开启module,默认开启
auto 项目在GoPath之外,根目录有go.mod文件

可以在系统环境变量中配置如下变量:GO111MODULE=auto

使用go module必须使用代理才能顺利的上网,环境变量中配置代理。需要配置如下的环境变量

GOPROXY=https://goproxy.cn,direct

go1.13之后GOPROXY的默认值是https://proxy.golang.org,国内无法访问。

go mod 常用命令

命令 说明
go mod init [modulename] 创建go.mod文件,如果该项目是在GoPath下面的,不用自己指定包名。如果不是在GoPath下的项目,必须提供包名,否则无法创建。
go mod download 根据go.mod文件下载依赖。
go mod tidy 整理依赖项,代码中用不到的依赖会被删除,新的依赖会被下载。
go mod graph 打印模块依赖
go mod vendor 将依赖复制到vendor下
go mod why 为什么需要依赖
go mod edit -fmt 格式化go.mod文件
go mod edit -require=golang.xx.xx 添加依赖项

go.mod文件

go.mod文件中包含该项目所有的依赖信息,和Java项目中的pom.xml文件类似。

以下为常用关键字和说明

关键字 关键字说明
module 包名说明
require 项目的依赖包及版本
indirect 间接引用
replace 依赖替换

go module导入本地包

一、同一个项目下

一个项目有如下的目录结构,main.go需要引用subpackage中的sb.go中的函数。

1
2
3
4
5
.
├── go.mod
├── main.go
├── subpackage
│ └── sb.go

go.mod文件不用任何配置,只需要在main.go中添加import "package1/subpackage"便可以引用了。

二、不同项目下

有如下的目录结构

1
2
3
4
5
6
7
8
9
10
.
├── moduledemo
│ ├── go.mod
│ └── main.go
├── package1
│ ├── go.mod
│ └── package1.go
├── package2
│ ├── go.mod
│ └── package2.go

说明:

在mouledemo项目main.go中想要调用package1包中的函数。需要在module项目的go.mod中添加如下配置。

1
2
require package1 v0.0.0
replace package1 => ../package1

在main.go文件中导入,import "package1"便可以调用package1中的内容了。

极端调用:在main.go中导入了"subprint.com/sbp"项目,并取别名为sbp,但是这个项目并不在goPath中,也不在网上,而是在本地的package2中。需要在go.mod中配置如下信息便可以调用。

1
2
require subprint.com/sbp v0.0.0
replace subprint.com/sbp => ../package2

Share 

 Previous post: go-gin-请求处理 Next post: go-reflect 

© 2025 long

Theme Typography by Makito

Proudly published with Hexo