生成的 go 文件的名称

mat*_*t.s 3 code-generation naming-conventions go

我正在生成一个 Go 文件(包括构建版本等常量),以便这些常量可以在其他包中使用。我创建了一个小工具来创建文件,go generate但我正在尝试想一个合适的名称,以便

  • 很明显它是生成的,所以如果它丢失(在构建时),用户就会知道运行go generate

  • 然后我可以将文件添加到 .gitignore

我的第一个猜测是这样的version_GENERATED.go

我应该注意哪些约定或更好的建议?

icz*_*cza 5

在文件名中添加像这样的后缀_GENERATED在生成文件之前不会保留任何信息,因为编译器只会给您“不相关”的错误,例如"undefined: xxx"(编译器不会猜测如果标识符存在,它将在version_GENERATED.go)。

例如,stringer生成器生成具有名称的文件type_string.go,其中类型被替换为其生成的类型的名称。

所以我认为简单地遵循文件名的一般准则就足够了,除了使用_gen_generated后缀。或者,如果您的工具是公共的并且也被其他人使用,则使用该工具的名称作为后缀(就像stringer这样做)。

如果您确实希望用户在生成器尚未运行时收到一条多言的错误消息,则生成器可能会生成一个导出的常量,如果错误消息中包含其名称,则该常量的名称是多言的,例如:

const MustRunStringerGenerator = 0
Run Code Online (Sandbox Code Playgroud)

在你的程序中像这样引用它:

var _ = MustRunStringerGenerator // Test if stringer has been run
Run Code Online (Sandbox Code Playgroud)

如果stringer尚未运行,您将看到一条错误消息:

undefined: MustRunStringerGenerator
Run Code Online (Sandbox Code Playgroud)