• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Golang 1.18 Workspace的使用

武飞扬头像
有理叔
帮助3

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

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

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

go mod init utils

之后编写代码

  1.  
    package utils
  2.  
     
  3.  
    import "fmt"
  4.  
     
  5.  
    func PrintHello(what string) {
  6.  
    fmt.Println("Hello", what)
  7.  
    }

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

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

go mod init test

再写一段代码

  1.  
    package main
  2.  
     
  3.  
    import "utils"
  4.  
     
  5.  
    func main() {
  6.  
    utils.PrintHello("World")
  7.  
    }

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

go work init main

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

  1.  
    go 1.19
  2.  
     
  3.  
    use (
  4.  
    ./main
  5.  
    )

再执行命令

go work use utils

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

  1.  
    go 1.19
  2.  
     
  3.  
    use (
  4.  
    ./main
  5.  
    ./utils
  6.  
    )

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

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfhkkga
系列文章
更多 icon
同类精品
更多 icon
继续加载