在 Go 1.18 及以后的版本中,工作区(Workspace)是一种新的项目管理方式,可以让多个项目共享同一个模块缓存和依赖。这意味着你不需要在每个项目中单独安装依赖,而是可以共享依赖,这样可以节省空间和时间。
假设我们有这样一个目录结构:
D:/goweb
├── project1
│ ├── project1.mod
│ └── main.go
├── project2
│ ├── project2.mod
│ └── main.go
├── project3
│ ├── project3.mod
│ └── main.go
...
├── projectn
│ ├── projectn.mod
│ └── main.go
如果在goweb下建立工作区,并添加所有项目。那么当第一个项目使用go get引用了某个包,其余项目都会共享这个包,而无需在每个项目中都用一次go get,非常方便。下面举例说明:
Step1:假设根目录还是goweb,命令行进入到根目录goweb下,创建工作区:
cd D:/goweb
go work init
Step2:使用如下命令创建两个文件夹:
mkdir project1 project2
Step3:执行以下命令来初始化每个project的mod文件:
cd project1
go mod init project1
cd ../project2
go mod init project2
Step4:返回到根目录,使用 go work use 命令将两个项目添加到工作区:
cd ..
go work use ./project1 ./project2
Step5:在 project1 和 project2 中分别创建 main.go 文件,内容如下:
package mainimport "github.com/gin-gonic/gin" // 导入 Gin 包func main() {// 创建一个默认的 Gin 引擎r := gin.Default()// 定义一个 GET 路由,当访问 "/ping" 时触发r.GET("/ping", func(c *gin.Context) {// 返回 JSON 响应,状态码为 200c.JSON(200, gin.H{"message": "pong", // 响应内容})})// 启动服务,默认监听 8080 端口r.Run()
}
Step6:切换到 project1 目录,执行以下命令安装 Gin:
cd project1
go get -u github.com/gin-gonic/gin
Step7:切换到 project2 目录,直接执行main:
cd ../project2
go run main.go
运行结果截图:
最后一行说明正在监听8080端口,说明程序执行成功,无需在当前项目再次引用gin包,工作区的包都是共享的。
总结:
Go 工作区是自 Go 1.18 版本引入的功能,旨在方便开发者管理多个模块及其依赖关系。通过使用命令 go work init
创建工作区,go work use < module-path>
添加模块,开发者可以轻松管理项目依赖,避免重复下载和版本冲突。工作区使得在多个项目中共享依赖变得简单,确保了项目结构的清晰与模块管理的便捷,从而提高了开发效率。