searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Golang--工作区workspace的正确使用

2023-07-17 06:50:43
109
0

前言

Go在早期没有一个成熟的依赖管理解决方案,将所有文件代码存放在GOPATH目录下,对于工程项目而言十分混乱、不友好,依赖难以管理。到Go1.11版本,官方推出了Go Mod依赖管理工具,也是目前最流行的依赖管理。

当使用Go Mod进行项目管理时,模块缓存默认存放在$GOPATH/pkg/mod目录下,也可以修改$GOMODCACHE来指定存放在另外一个位置。

工作区(workspace)是Go在1.18版本中引入的多模块管理的方案。原来在本地中依赖其他模块但又没有上传到远程仓库,一般使用replace指令。而工作区就可以解决多模块管理问题。

工作区的使用

go mod进行包管理主要分为两类,一类是公网上的,直接引入用go mod管理即可;另一类是本地包,go mod是通过replace来修改引用包的实际路径。这种包引用对于git提交就非常麻烦,每次提交前需要把replace去掉才行。所以使用go work(工作区),就是在一个目录(文件夹)中有一个go.work文件。go.work文件示例如下:

go 1.19
​
use (
    ./Demo1
    ./Demo3
    D:/GoPath/GoProject/Demo2
)

其中,可以使用多个模块引用包路径,能够使用绝对地址和相对地址【就是use后面加包模块路径】。

这些模块,如Demo1,一旦放在工作区中,Demo1下的go.mod寻找就会通过go.work来实现,所以需要在go work目录下运行go work use <Demo1-path>,这样就能在Demo1项目中引用Demo1模块中的包,或者其他项目包(go work use 其他模块)。

go.work是整个工作区的基本配置文件,用于本地开发使用,不进行git提交。

初始化workspace

在选定目录下运行,go worl init 命令后会生成一个go.work文件。若该文件目录的上一级中已经存在go.work,则该目录无法创建新的go.work。

使用$go env GOWORK可以查看go.work所在位置。

添加项目到workspace

使用命令go work use [-r] [project1_path project2_path ...]将项目添加至workspace中,其中-r表示递归查找。项目表示包含go.mod的模块。

workspace中使用replace

在go.work中使用replace,那么所有工作区中项目在引用该包时会从替代路径项目中引用。

go 1.19
​
use (
    ./Demo1
    ./example
)
​
replace (
    github.com/link1st/example => ./example
)

比如,该go.work文件,工作区中项目在引用github.com/link1st/example包时会使用本地./example包进行替代。

0条评论
0 / 1000
WSMG
3文章数
0粉丝数
WSMG
3 文章 | 0 粉丝
WSMG
3文章数
0粉丝数
WSMG
3 文章 | 0 粉丝
原创

Golang--工作区workspace的正确使用

2023-07-17 06:50:43
109
0

前言

Go在早期没有一个成熟的依赖管理解决方案,将所有文件代码存放在GOPATH目录下,对于工程项目而言十分混乱、不友好,依赖难以管理。到Go1.11版本,官方推出了Go Mod依赖管理工具,也是目前最流行的依赖管理。

当使用Go Mod进行项目管理时,模块缓存默认存放在$GOPATH/pkg/mod目录下,也可以修改$GOMODCACHE来指定存放在另外一个位置。

工作区(workspace)是Go在1.18版本中引入的多模块管理的方案。原来在本地中依赖其他模块但又没有上传到远程仓库,一般使用replace指令。而工作区就可以解决多模块管理问题。

工作区的使用

go mod进行包管理主要分为两类,一类是公网上的,直接引入用go mod管理即可;另一类是本地包,go mod是通过replace来修改引用包的实际路径。这种包引用对于git提交就非常麻烦,每次提交前需要把replace去掉才行。所以使用go work(工作区),就是在一个目录(文件夹)中有一个go.work文件。go.work文件示例如下:

go 1.19
​
use (
    ./Demo1
    ./Demo3
    D:/GoPath/GoProject/Demo2
)

其中,可以使用多个模块引用包路径,能够使用绝对地址和相对地址【就是use后面加包模块路径】。

这些模块,如Demo1,一旦放在工作区中,Demo1下的go.mod寻找就会通过go.work来实现,所以需要在go work目录下运行go work use <Demo1-path>,这样就能在Demo1项目中引用Demo1模块中的包,或者其他项目包(go work use 其他模块)。

go.work是整个工作区的基本配置文件,用于本地开发使用,不进行git提交。

初始化workspace

在选定目录下运行,go worl init 命令后会生成一个go.work文件。若该文件目录的上一级中已经存在go.work,则该目录无法创建新的go.work。

使用$go env GOWORK可以查看go.work所在位置。

添加项目到workspace

使用命令go work use [-r] [project1_path project2_path ...]将项目添加至workspace中,其中-r表示递归查找。项目表示包含go.mod的模块。

workspace中使用replace

在go.work中使用replace,那么所有工作区中项目在引用该包时会从替代路径项目中引用。

go 1.19
​
use (
    ./Demo1
    ./example
)
​
replace (
    github.com/link1st/example => ./example
)

比如,该go.work文件,工作区中项目在引用github.com/link1st/example包时会使用本地./example包进行替代。

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0