所有的 Go 代码都是以包的形式组织起来的。Go 中的包就是目录或文件夹里面包括一个或者多个以 .go 结尾的文件。用目录或文件夹这样的方式来管理代码,与电脑管理目录或文件夹是一样一样的。

所有的 Go 代码都是放在包里的,且只能是通过包来进行访问。理解并且建立良好的包的习惯,可以帮助写出高效的代码。

包名

包名应该遵循以下几个规则

  • 包名应全部为小写
    • time (提供测量和显示时间的功能)
    • list (实现一个双向链表)
    • http (提供 HTTP 客户端和服务器实现)
  • 如果含义相当明显,名称应该缩写(如fmt)。但是, 如果缩写包名称使其含糊不清或不清楚,请不要这样做。
    • 当程序员熟悉缩写时,包名可能会被缩写。广泛使用的包通常具有压缩名称:
      • strconv (字符串转换)
      • syscall (系统调用)
      • fmt (格式化的 I/O)
  • 如果可能的话,应该是一个词。如果需要两个词,不应该用下划线分隔,第二个词也不应该大写。(strconv包就是一个例子)
    • 在 Go 程序中,另一种语言的典型名称风格可能不是惯用的。以下是两个在其他语言中可能风格不错但在 Go 中不太适合的名称示例:
      • computeServiceClient
      • priority_queue
  • 导入的包名可能与本地变量名冲突,所以不要使用包用户可能也想使用的名称。(例如,如果fmt包被命名为format,那么导入该包的任何人如果把一个局部变量也命名为format,则将面临冲突的风险)。
    • 不要从用户那里窃取好名字。 避免为包提供客户端代码中常用的名称。例如,缓冲 I/O 包被称为bufio,而不是buf,因为它buf 是缓冲区的一个很好的变量名。

结论

包名是 Go 程序中良好命名的核心。花时间选择好的包名并组织好你的代码,这有助于用户理解和使用您的软件包,并帮助维护人员优雅地发展它们。