跳转至

认识go.work

在 go 1.18 之后,go 引入了 Workspace Mode ,即工作区模式,用于在工作区中管理多个 go module,而go.work则用来管理工作区。

使用go.work

初始化工作区

Bash
go work init

此时生成go.work文件,内容如下

Text Only
go 1.22.1

添加项目到工作区

假定当前目录下有两个go module,分别是./http_client./http_server,使用下面的命令添加到工作区

Bash
go work use ./http_client
go work use ./http_server

此时生成go.work文件,内容如下

Text Only
1
2
3
4
5
6
go 1.22.1

use (
    ./http_client
    ./http_server
)

使用replace关键字

go.mod一样,go.work也支持replace关键字,用于替换已有的依赖包

Text Only
go 1.22.1

use (
    ./http_client
    ./http_server
)

replace (
    "github.com/lzwang/http_client" => "./http_client"
)

表示项目中的 github.com/lzwang/http_client 在本地 ./http_client 中寻找

格式化go.work

Bash
go work edit -fmt go.work

同步go.work

此命令用于同步工作区的go module依赖关系

Bash
go work sync

查看系统go.work工作区

Bash
go env GOWORK

示例

下面是一个使用go.work管理工作区的示例,用来同时管理http客户端和服务端两个包,目录结构如下

Text Only
.
├── README.md
├── go.work
├── http_client
│   ├── go.mod
│   ├── go.sum
│   └── main.go
└── http_server
    ├── go.mod
    └── main.go

go.work内容如下

Text Only
1
2
3
4
5
6
go 1.22.1

use (
    ./http_client
    ./http_server
)
  • 文件说明当前工作区引用了两个go module
  • 分别是./http_client./http_server

参考