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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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不同环境的交叉编译