Golang中如何从build/docs中排除指定目录
Golang中如何从build/docs中排除指定目录
在 https://github.com/switchupcb/copygen 中,我该如何从 go get 和 go install 二进制文件中排除 example 包?它也被包含在 godoc 中。我不确定在这种情况下排除示例是否必要,但我需要在即将进行的项目中排除一个目录。
或者,在 examples 目录中添加另一个 go.mod 文件是否可行?
更多关于Golang中如何从build/docs中排除指定目录的实战教程也可以访问 https://www.itying.com/category-94-b0.html
我通过在 examples 目录中添加一个 go.mod 文件来实现这一点。
更多关于Golang中如何从build/docs中排除指定目录的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
我不确定是否完全理解了您的问题,但可以看看构建约束是否能帮到您。
构建约束列出了文件应包含在包中的条件。
提供的示例展示了如何排除文件,但有没有办法使用构建约束来指定哪些文件被包含?理想情况下,我们不会向 examples 添加构建约束。我想防止在 go get 和 go install 中使用 godoc 中列出的 example 包;因为它们对程序没有用处。
在 Go 项目中,要从构建和文档中排除特定目录(如 examples),有以下几种标准方法:
方法1:使用 .go 构建约束文件后缀
在要排除的目录中的每个 Go 文件添加构建约束:
//go:build exclude
// +build exclude
package example
// 文件内容...
或者更具体地排除文档生成:
//go:build ignore
// +build ignore
package example
方法2:使用 //go:build 标签配合目录布局
在 examples 目录中创建 doc.go 文件:
//go:build ignore
// Package examples contains usage examples (excluded from builds).
package examples
方法3:修改 go.mod 使用 exclude 指令
在项目根目录的 go.mod 中添加:
module github.com/switchupcb/copygen
go 1.21
// 排除 examples 目录
exclude (
github.com/switchupcb/copygen/examples v0.0.0
)
replace github.com/switchupcb/copygen/examples => /dev/null
方法4:使用独立的 go.mod 文件(如你所提)
在 examples 目录中添加独立的 go.mod:
cd examples
go mod init github.com/switchupcb/copygen/examples
这样 go get 和 go install 会忽略该目录,因为它是独立的模块。
方法5:使用构建标签配合 go build
创建 examples 目录结构:
examples/
├── go.mod
├── main.go
└── tools.go
在 examples/go.mod 中:
module github.com/switchupcb/copygen/examples
go 1.21
require github.com/switchupcb/copygen v0.0.0
replace github.com/switchupcb/copygen => ../
方法6:使用 godoc 的 -exclude 标志
生成文档时排除特定目录:
godoc -http=:6060 -exclude ".*examples.*"
实际示例
对于你的项目结构,建议使用方法4(独立 go.mod):
# 在 examples 目录中
echo 'module github.com/switchupcb/copygen/examples
go 1.21
require github.com/switchupcb/copygen v0.0.0
replace github.com/switchupcb/copygen => ../' > examples/go.mod
同时,在根目录的 go.mod 中添加:
module github.com/switchupcb/copygen
go 1.21
// 确保主模块不包含 examples
exclude github.com/switchupcb/copygen/examples v0.0.0
这样配置后:
go get和go install会忽略examples目录godoc默认不会包含独立模块的文档- 示例代码仍可独立运行

