对于从其他语言过渡到 Go 语言的程序员来说,我倾向于在代码审查中提到的一件事是他们会过度使用包。
Go 语言没有提供有关可见性的详细方法; Java有 public、protected、private 以及隐式 default 的访问修饰符。 没有 C++ 的 friend 类概念。
在 Go 语言中,我们只有两个访问修饰符,public 和 private,由标识符的第一个字母的大小写表示。 如果标识符是公共的,则其名称以大写字母开头,该标识符可用于任何其他 Go 语言包的引用。
注意:你可能会听到人们说 exported 与 not exported, 跟 public 和 private 是同义词。
鉴于包的符号的访问有限控件,Go 程序员应遵循哪些实践来避免创建过于复杂的包层次结构?
贴士:除 cmd/ 和 internal/ 之外的每个包都应包含一些源代码。
我的建议是选择更少,更大的包。 你应该做的是不创建新的程序包。 这将导致太多类型被公开,为你的包创建一个宽而浅的API。
以下部分将更为详细地探讨这一建议。
贴士:来自 Java?如果您来自 Java 或 C#,请考虑这一经验法则 – Java 包相当于单个 .go 源文件。 - Go 语言包相当于整个 Maven 模块或 .NET 程序集。