假设我有一个非常棒的Go二进制文件,它会使一些数据非规范化,我想把它放在:
//some/path/denormalize/
理想情况下,我的包名称为denormalize
,这样我就可以遵循“[设计包时]的指导原则,考虑限定标识符的两个部分如何协同工作,而不仅仅是成员名称”。因此,潜在的成员函数可能是denormalize.FromX(...)
。但是,如果我将main.go
放在denormalize/
包下的denormalize二进制文件中,我就不能使用预期的包名,因为现在该包被命名为main
。
我考虑过的一些选项:
main.go
放在denormalize/
下,然后将其余代码放在internal/
或api/
或pkg/
下。优点:这似乎是大多数人所做的。缺点:包名称没有意义,它违反了确保限定符的两个部分一起工作的原则,因为api.FromX(...)
不再有意义。这会导致更详细的名称,例如api.DenormalizeFromX(...)
。main.go
放在denormalize/main/
下,其余代码放在denormalize/
下。优点:包名称保持有意义。缺点:子目录然后依赖于具有一些代码味道的父目录。是否有其他选项我没有考虑将main.go放在哪里,以免它强迫我使用不同的包名?