Golang中如何从build/docs中排除指定目录

Golang中如何从build/docs中排除指定目录 在 https://github.com/switchupcb/copygen 中,我该如何从 go getgo install 二进制文件中排除 example 包?它也被包含在 godoc 中。我不确定在这种情况下排除示例是否必要,但我需要在即将进行的项目中排除一个目录。

或者,在 examples 目录中添加另一个 go.mod 文件是否可行?


更多关于Golang中如何从build/docs中排除指定目录的实战教程也可以访问 https://www.itying.com/category-94-b0.html

4 回复

我通过在 examples 目录中添加一个 go.mod 文件来实现这一点。

更多关于Golang中如何从build/docs中排除指定目录的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我不确定是否完全理解了您的问题,但可以看看构建约束是否能帮到您。

构建约束列出了文件应包含在包中的条件。

提供的示例展示了如何排除文件,但有没有办法使用构建约束来指定哪些文件被包含?理想情况下,我们不会向 examples 添加构建约束。我想防止在 go getgo 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 getgo 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 getgo install 会忽略 examples 目录
  • godoc 默认不会包含独立模块的文档
  • 示例代码仍可独立运行
回到顶部