Go 1.18 多工作区 workspace 分析

767 阅读1分钟

什么是多工作区(workspace)

  • 为解决本地开发时,碰到的本地依赖查找错位问题而新增的一个依赖查找定位功能。go work 的优先级高于 go mod。
  • 使用 go work 的时候,本地会生成 go.work 文件, 类似于 go.mod 文件。

解决了什么问题

  • 对开源库进行了二次开发后的本地库,可以使用 go use 对依赖进行查找位置指定
go work use [module_dir]
  • 多项目并行开发时, 可以通过 go use 指定依赖进行指定位置查找

怎么使用

先看 help 信息

Usage:

	go work <command> [arguments]

The commands are:

	edit        edit go.work from tools or scripts
	init        initialize workspace file
	sync        sync workspace build list to modules
	use         add modules to workspace file

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

go work 初始化

go work init ./mod ./tools

项目目录结构

awesomeProject
├── mod
│   ├── go.mod      // 子模块
│   └── main.go
├── go.work         // 工作区
└── tools
    ├── fish.go
    └── go.mod      // 子模块

例子 go.work 文件

go 1.18

use (
    ./mod 
    ./tools
)

replace golang.org/x/net => example.com/fork/net v1.4.5

go.work 主要由三个命令组成

  • go:声明 go 版本号,主要用于后续新语义的版本控制。
  • use:声明应用所依赖模块的具体文件路径,路径可以是绝对路径或相对路径,可以在应用命目录外均可。
  • replace:声明替换某个模块依赖的导入路径,优先级高级 go.mod 中的 replace 指令。