08-02-GO语言 go work

GO语言 | go work 神一般的管理 多个module没烦恼_“逛丢一只鞋”的博客-CSDN博客

Go1.18 新特性之多模块Multi-Module工作区模式_Golang | 忙忙碌碌网

go在1.18版本更新了一个超级重磅的功能,那就是work!Tutorial: Getting started with multi-module workspaces - The Go Programming Language

开始之前说明一下的我的go env

GOROOT=/usr/local/go

GOBIN=$GOROOT/bin

GOPATH=/home/liwu/project/gowork

#GOPROXY=https://goproxy.io,direct

GOPROXY=https://goproxy.cn,direct

GO111MODULE=on

GOSUMDB=off

GOFLAGS=-mod=readonly

PATH=$PATH:$GOBIN:$GOPATH/bin

export GO111MODULE GOSUMDB GOFLAGS GOPROXY GOPATH GOROOT GOBIN PATH

source /etc/profile

go work工作区模式

Go 1.18引入的工作区模式,可以让你不用修改每个Go Module的go.mod,就能同时跨多个Go Module进行开发。

工作区里的每个Go Module在解析依赖的时候都被当做根Module。

在Go 1.18以前,如果遇到以下场景:Module A新增了一个feature,Module B需要使用Module A的这个新feature,你有2种方案:

  • 发布Module A的修改到代码仓库,Module B更新依赖的Module A的版本即可
  • 修改Module B的go.mod,使用replace指令把对Module A的依赖指向你本地未发布的Module A所在目录。

等Module A发布后,在发布Module B的时候,再删除Module B的go.mod文件里的replace指令。

有了Go工作区模式之后,针对上述场景,我们有了更为简单的方案:你可以在工作区目录维护一个go.work文件来管理你的所有依赖。

go.work里的use和replace指令会覆盖工作区目录下的每个Go Module的go.mod文件,因此没有必要去修改Go Module的go.mod文件了。

go work用法介绍

Usage:

        go work <command> [arguments]

The commands are:

        edit        edit go.work from tools or scripts
        init        initialize workspace file
        sync        sync workspace build list to modules
        use         add modules to workspace file

Use "go help work <command>" for more information about a command.

第一步 go work init

使用go work init来创建一个workspace,go work init 的语法如下所示:

go work init [moddirs]

moddirs是Go Module所在的本地目录。如果有多个Go Module,就用空格分开。

如果go work init后面没有参数,会创建一个空的workspace。

执行go work init后会生成一个go.work文件,go.work里列出了该workspace需要用到的Go Module所在的目录,

workspace目录不需要包含你当前正在开发的Go Module代码。

第二步骤 go work use

如果要给workspace新增Go Module,可以使用如下命令:

go work use [-r] moddir

moddir是Go Module所在的本地目录

或者手动编辑go work文件。

如果带有-r参数,会递归查找-r后面的路径参数下的所有子目录,把所有包含go.mod文件的子目录都添加到go work文件中。

如果某个Go Module的目录已经被加到go.work里了,后面该目录没有go.mod文件了或者该目录被删除了,那对该目录再次执行go work use命令,

该目录的use指令会从go.work文件里自动移除。(注意:自动移除要从Go 1.18正式版本才会生效,Go 1.18beta1版本有bug,自动删除不会生效)

go.work的语法

go.work的语法和go.mod类似,包含如下3个指令:

  • go: go的版本,例如 go 1.18
  • use: 添加一个本地磁盘上的Go Module到workspace的主Module集合里。use后面的参数是go.mod文件所在目录相对于workspace目录的相对路径,例如use ./main。

use指令不会添加指定目录的子目录下的Go Module到workspace的主Module集合里。

  • replace: 和go.mod里的 replace指令类似。go.work里的 replace指令可以替换某个Go Module的特定版本或者所有版本的内容。

最后根据以下图进行

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夸父手杖

谢谢老板

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值