包
所有的 Go 代码都是以包的形式组织起来的。Go 中的包就是目录或文件夹里面包括一个或者多个以 .go
结尾的文件。用目录或文件夹这样的方式来管理代码,与电脑管理目录或文件夹是一样一样的。
所有的 Go 代码都是放在包里的,且只能是通过包来进行访问。理解并且建立良好的包的习惯,可以帮助写出高效的代码。
包名
包名应该遵循以下几个规则
- 包名应全部为小写
time
(提供测量和显示时间的功能)list
(实现一个双向链表)http
(提供 HTTP 客户端和服务器实现)
- 如果含义相当明显,名称应该缩写(如fmt)。但是, 如果缩写包名称使其含糊不清或不清楚,请不要这样做。
- 当程序员熟悉缩写时,包名可能会被缩写。广泛使用的包通常具有压缩名称:
strconv
(字符串转换)syscall
(系统调用)fmt
(格式化的 I/O)
- 当程序员熟悉缩写时,包名可能会被缩写。广泛使用的包通常具有压缩名称:
- 如果可能的话,应该是一个词。如果需要两个词,不应该用下划线分隔,第二个词也不应该大写。(strconv包就是一个例子)
- 在 Go 程序中,另一种语言的典型名称风格可能不是惯用的。以下是两个在其他语言中可能风格不错但在 Go 中不太适合的名称示例:
computeServiceClient
priority_queue
- 在 Go 程序中,另一种语言的典型名称风格可能不是惯用的。以下是两个在其他语言中可能风格不错但在 Go 中不太适合的名称示例:
- 导入的包名可能与本地变量名冲突,所以不要使用包用户可能也想使用的名称。(例如,如果fmt包被命名为format,那么导入该包的任何人如果把一个局部变量也命名为format,则将面临冲突的风险)。
- 不要从用户那里窃取好名字。 避免为包提供客户端代码中常用的名称。例如,缓冲 I/O 包被称为
bufio
,而不是buf
,因为它buf
是缓冲区的一个很好的变量名。
- 不要从用户那里窃取好名字。 避免为包提供客户端代码中常用的名称。例如,缓冲 I/O 包被称为
结论
包名是 Go
程序中良好命名的核心。花时间选择好的包名并组织好你的代码,这有助于用户理解和使用您的软件包,并帮助维护人员优雅地发展它们。