打赏

go-work使用

go work使用

(1.)初始化工作空间

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代码。
(2.)新增模块

go work use [-r] moddir

说明:
如果带有-r参数,会递归查找-r后面的路径参数下的所有子目录,把所有包含go.mod文件的子目录都添加到go work文件中。
如果某个Go Module的目录已经被加到go.work里了,后面该目录没有go.mod文件了或者该目录被删除了,那对该目录再次执行go work use命令,该目录的use指令会从go.work文件里自动移除。

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的特定版本或者所有版本的内容。

实践案例

(1.) 总体的目录结构

├── go.work
├── mypkg
│   ├── go.mod
│   ├── go.sum
│   └── main.go
└── workmod
    └── cast
        ├── LICENSE
        ├── Makefile
        ├── README.md
        ├── cast.go
        ├── cast_test.go
        ├── caste.go
        ├── go.mod
        ├── go.sum
        └── timeformattype_string.go

(2.) mypkg包中代码
go.mod文件

module mypkg
 
go 1.18
 
require (
    github.com/davecgh/go-spew v1.1.1 // indirect
    github.com/spf13/cast v1.5.0 // indirect
)

main.go

package main
 
import (
    "github.com/davecgh/go-spew/spew"
    "github.com/spf13/cast"
)
 
func main() {
    spew.Dump("1")
    spew.Dump(cast.ToBool("1"))
 
}

(3.)workmod中的文件为下载的第三方包

git clone https://github.com/spf13/cast.git

(3.)在mypkg包外层进行初始化

go work init ./mypkg ./workmod/cast

go.work文件内容如下:
go 1.18

use (
	./work-demo
	./workmod/cast
)

# 执行完成后,生成go.work文件,该文件里通过use指令使用了mypkg和workmod/cast,可以在workmod/cast中修改文件,也可以debug调试,goland中,在External Libaries 中找到Go Workspace,双击Go Module 定位到对应的源文件,在源文件处打断点,即可调试,此时的源文件已经替换为我们在go.work中定义的文件了,而不是go.mod中的文件,go.work优先级高于go.mod

(4.)go work 其他命令
go help work

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
posted @   苍山落暮  阅读(1837)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2022-06-10 unix socket 抓包
2022-06-10 leveldb查看工具
2022-06-10 git-submodule使用
2022-06-10 csdn复制问题
2021-06-10 golang不同环境的交叉编译

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示