Golang 1.18新特性工作区workspace
需求分析
加入现在我们把一个大的项目分成了两个项目,一个项目是基础模块,用来实现项目的公用功能。第二个项目要依赖第一个项目,注意:这里提到的是项目,而不是模块。解决方法有二:
- 把第一个项目创建好,提交到github,第二个项目使用 go get 下载。
- 第二个就是我们今天提到的使用Golang1.18里面的新功能workspace。
第一种方法有一个缺陷就是,如果我们频繁的修改代码,那么第二个项目就要不停的更新,否则版本就不是最新的。而第二个方法就没有这个问题,项目可以在本地依赖。
注意:方法二功能需要Go版本是1.18以上!!!
实现步骤
-
创建一个工作区目录。例如:
myworkspace
-
使用vscode在当前工作区目录打开,
code .
-
创建一个文件夹
common
-
在该文件下面初始化项目,
go mod init common
-
在该文件夹中创建一个
common.go
文件,内容如下:package common import "fmt" func Dosomething() { fmt.Println("do something...") }
-
在
myworkspace
文件夹中再创建一个文件夹,
myproject_1
-
在
myproject_1
中初始化项目,
go mod init myproject_1
-
在该项目中创建一个
main.go
文件,内容如下:package main import "common" func main() { common.Dosomething() } // package common is not in GOROOT
这种情况下是不能导入包的,因为是两个项目里面,而不是同一个项目的两个模块。
-
在
myworkspace
目录下执行如下命令:go work init .\common\
执行完该命令,会生成一个
go.work
文件,内容如下:go 1.18 use .\common\
-
再执行如下命令:
go work use .\myproject_1\
执行完该命令,
go.work
文件会更新,内容如下:go 1.18 use ( ./myproject_1 .\common\ )
-
现在我们再来执行
main.go
,就可以正常使用common项目下的函数了[Running] go run "e:\golang开发学习\myworkspace\myproject_1\main.go" do something... [Done] exited with code=0 in 2.632 seconds