5.1. 考虑更少,更大的包
对于从其他语言过渡到 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
程序集。