01

介绍

Go 官方在 Go v1.11 新增 Go Modules 模式,并一直持续到 Go v1.16,每个版本的 Go Modules 模式都会有一些变化。但是,我们的项目使用 Go Modules 模式时,仍然会遇到一些问题。

直到 Go v1.18 版本新增 Workspaces 模式,解决了 Go Modules 模式的这些问题,本文我们介绍 Workspaces 模式的使用方式。

02

引言

go.modreplace
go.modgo.modreplace

03

使用方式

golang.org/x/example

创建 Go 项目

示例代码:

输出结果:

阅读上面这段内容,是我们已经非常熟悉的使用 Go Modules 模式创建 Go 项目的操作步骤,接下来,我们介绍 Workspaces 模式的使用方式。

创建工作区

go.workgouse
gogo.modgo
usehello
main.go

输出结果:

Homemain.go

输出结果:

我们可以在输出结果中发现,Go 找不到项目使用的依赖模块,原因是我们在工作区外运行 Go 项目,Go 找不到需要的模块。

04

使用场景

我们在学会使用 Workspaces 模式后,使用该模式解决 Part 02 提到的问题。

golang.org/x/exampleToUpper

在 Go 未提供 Workspaces 模式时,我们需要下载依赖项到本地,然后修改下载到本地的依赖项文件。

/Users/frank/workspace/hello/example/stringutil/reverse.goToUpper
main.go

输出结果:

replace

使用 Workspaces 模式

我们使用 Go 1.18 提供的 Workspaces 模式,实现我们的需求。

example
go work useexampleexampleGOMODCACHEexample
go.modreplace

05

总结

本文我们先叙述使用 Go Modules 模式面临的一些问题,然后介绍 Go v1.18 新增的 Workspaces 模式的使用方式,最后通过示例介绍使用 Workspaces 模式可以解决使用 Go Modules 模式中的问题。

go.work.gitignore
go work initgo work usego help work

参考资料:

  1. https://github.com/golang/proposal/blob/master/design/45713-workspace.md
  2. https://www.youtube.com/watch?v=wQglU5aB5NQ
  3. https://go.dev/blog/get-familiar-with-workspaces
  4. https://go.dev/doc/tutorial/workspaces
  5. https://go.dev/ref/mod#workspaces
  6. https://pkg.go.dev/cmd/go#hdr-Workspace_maintenance
  7. https://go.dev/ref/mod#commands-outside