跳到主要内容

go工作区

提示

大型项目通常包含多个模块,以经典的MVC架构为例,会包含 DAOServiceController 等三层。每一层包含一个或多个模块,层与层之间通过接口进行交互。分层可以确定边界,降低复杂度,提高代码的可维护性。

go 在1.8版本引入工作区模式,在介绍 go 工作区之前,先看一下 maven 多模块的目录结构。

root
├── pom.xml
├── dao
│ └── pom.xml
├── service
│ └── pom.xml
└── controller
└── pom.xml

1. 新建main模块

 新建工作区,进入工作区,新增 main 文件夹,进入 main 文件夹,初始化 main 模块,main 是工作空间的第一个模块,在 main 模块下新建 main.go 文件,作为程序的入口。关于目录、包和模块的关系,如果有疑惑,可以参考go模块学习笔记第5节的内容

mkdir workspace
cd workspace
mkdir main
cd main
go mod init example.com/main

 此时工作空间的目录结构如下

workspace
└── main
├── go.mod
└── main.go

main 里面调用 golang.org/x/example/stringutil 里面的字符串翻转函数 Reverse,将 Hello 翻转为 olleH

package main

import (
"fmt"

"golang.org/x/example/stringutil"
)

func main() {
fmt.Println(stringutil.Reverse("Hello"))
}

2. 新建工作区

 在 workspace 根目录下,初始化工作区,并指定将 main 模块加入到工作区。

go work init ./main

 执行完成后,根目录下增加了 go.work 文件,内容如下。此时在 workspace 根目录下可以执行 moudle main 的代码,go run example.com/main

go 1.18

use ./main

3. 增加模块

 新增一个模块,替换掉 main 模块里依赖的 golang.org/x/example/stringutil

 在 workspace 根目录下新建文件夹 stringutil,进入 stringutil,初始化新的模块。

go mod init example.com/stringutil

 在 stringutil 下新建 main.go 文件,编写 Reverse 方法。

package stringutil

func Reverse(string) string {
return "abc"
}

stringutil 模块已经创建完毕,现在将它加入到 workspace 里,供 main 模块使用。

go work use ./stringutil

4. 调用本地stringutil模块

 将 main 模块里 golang.org/x/example/stringutil 替换成本地的 stringutil 。修改 main 模块里面的 main.go,执行go run example.com/main,可以看到替换成功。

package main

import (
"fmt"

"example.com/stringutil"
)

func main() {
fmt.Println(stringutil.Reverse("Hello"))
}

 此时,workspace 的目录结构如下。对比工作区目录结构和文章开头的 maven 的目录结构,相似度非常的高。

workspace
├── go.work
├── main
│ ├── main.go
│ ├── go.mod
│ └── go.sum
└── stringutil
├── main.go
├── go.mod
└── go.sum

署名-非商业性使用-禁止演绎 4.0 国际