Saki's 研究记录

Golang 1.18 工作区模式(workspace mode)

字数统计: 436阅读时长: 1 min
2022/04/13

环境

OS: Darwin Kernel Version 21.4.0
GO: go version go1.18 darwin/arm64

背景

Go1.18 最 “实用“ 的功能,应该是 Go 工作区模式,它使得开发者在多个模块中的开发工作变得更加简单。

使用

在同一个目录下创建两个空的 godemoutil

1
mkdir -p workspace_mode_example/{demo,util}

然后分别使用 go mod init 来初始化。

1
2
3
4
cd workspace_mode_example/demo
go mod init workspace_mode_example/demo
cd workspace_mode_example/util
go mod init workspace_mode_example/util

go.mod 里的 go 版本改为 go 1.18,并将所有的依赖删除。

1
2
3
4
5
6
7
8
# cat demo/go.mod
module workspace_mode_example/demo

go 1.18
# cat util/go.mod
module workspace_mode_example/util

go 1.18

并在 demo 中写入 main.go,在 util 写入 util.go,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# cat demo/main.go
package main

import (
"fmt"
"workspace_mode_example/util"
)

func main() {
fmt.Println(util.SayHey("saki"))
}

# cat util/util.go
package util

import "fmt"

func SayHey(str string) string {
return fmt.Sprintf("Hello golang 1.18, hey %s", str)
}

执行命令创建创建工作区文件 go.work

1
2
3
4
5
6
7
8
9
10
11
12
13
# go work init ./util ./demo
# tree .
.
├── Makefile
├── demo
│   ├── go.mod
│   └── main.go
├── go.work
└── util
├── go.mod
└── util.go

2 directories, 6 files

创建的 go.work 文件如下所示:

1
2
3
4
5
6
7
# cat go.work
go 1.18

use (
./demo
./util
)

然后无论我在哪个目录下,只要所在位置的父级目录有 go.work 文件,即处于该工作区内,go 的编译器都会自动引用本地的 util 包。

1
2
3
# cd demo
# go run main.go
Hello golang 1.18, hey saki

总结

使用工作区模式,将使整个开发流程更加流畅,个人认为这可能是 go1.18 最为实用的功能,强烈推荐大家使用起来~
另外 go.work 文件是工作区的标志,该文件不需要上传至 github,只用于本地开发测试使用。

引用

Go-dev/tutorial/workspaces
掌握 Go 工作区模式

以上。

CATALOG
  1. 1. 环境
  2. 2. 背景
  3. 3. 使用
  4. 4. 总结
  5. 5. 引用