Golang 1.18 Workspace的使用

Golang 1.18版本发布以后,大家更多都在关注泛型,但实际上有一个可能更加有用的新功能却被大家忽略了,那就是Workspace,国内大家都习惯于称之为工作区,先来看看它能为我们带来什么帮助。

在Workspace出现之前,我们主要是使用go module来定义一个模块,如果需要引入其他模块,最常使用的的方式是通过go get或者go mod tidy的方式来引入我们的模块。但是,始终这种方式存在一些问题,首先,这样引入的其他模块是只读的,我们没有办法直接修改代码;其次,这样的方式导致每当修改被引用的模块时,都需要修改引用该模块的项目的依赖版本,这会造成很大的工作量,尤其对于某个被引用模块是我们自己定义的,而且仅在某些固定模块中引用时,这种繁杂的工作会更加多。Workspace很好的解决了这个问题,我们先来看一个使用Workspace的例子。

首先,创建一个目录utils,然后执行命令,创建一个utils的模块

go mod init utils

之后编写代码

package utils

import "fmt"

func PrintHello(what string) {
	fmt.Println("Hello", what)
}

在这个包里有一个函数,打印Hello

现在,在utils的平级目录下,创建一个main目录,创建test模块

go mod init test

再写一段代码

package main

import "utils"

func main() {
	utils.PrintHello("World")
}

这里大家就该奇怪了,这里import一个utils,编译不通过吧。的确,目前这样是会出现问题的,接下来就是Workspace发挥作用的时候了,先重新回到utils和main目录的父目录,执行下面的命令

go work init main

执行完命令,就会在该目录下生成一个go.work文件,我们已经初始化了一个Workspace,打开看一下,内容如下,此时该Workspace下只有一个./main目录下的模块

go 1.19

use (
	./main
)

再执行命令

go work use utils

此时,go.work文件内容如下

go 1.19

use (
	./main
	./utils
)

也就是说现在main和utils已经归属于同一个Workspace了,现在再回去看一下之前的main.go文件,此时已经不会报错了。所以Workspace可以将多个模块归入到一个Workspace下,尤其是模块之间强依赖而且有随时调整依赖模块的需要时,这样工作会更加方便。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值