Skip to Content
Go程序设计语言
book

Go程序设计语言

by 艾伦A. A.多诺万, 布莱恩W. 柯尼汉
August 2021
Beginner to intermediate
450 pages
6h 1m
Chinese
Pearson
Content preview from Go程序设计语言

10.1 引言

任何包管理系统的目的都是通过对关联的特性进行分类,组织成便于理解和修改的单元,使其与程序的其他包保持独立,从而有助于设计和维护大型的程序。模块化允许包在不同的项目中共享、复用,在组织中发布,或者在全世界范围内使用。

每个包定义了一个不同的命名空间作为它的标识符。每个名字关联一个具体的包,它让我们在为类型、函数等选取短小而且清晰的名字的同时,不与程序的其他部分冲突。

包通过控制名字是否导出使其对包外可见来提供封装能力。限制包成员的可见性,从而隐藏API后面的辅助函数和类型,允许包的维护者修改包的实现而不影响包外部的代码。限制变量的可见性也可以隐藏变量,这样使用者仅可以通过导出函数来对其访问和更新,他们可以保留自己的不变量以及在并发程序中实现互斥的访问。

当我们修改一个文件时,我们必须重新编译文件所在的包和所有潜在依赖它的包。众所周知,Go程序的编译比其他语言要快,即便从零开始编译也如此。这里有三个主要原因。第一,所有的导入都必须在每一个源文件的开头进行显式列出,这样编译器在确定依赖性的时候就不需要读取和处理整个文件;第二,包的依赖性形成有向无环图,因为没有环,所以包可以独立甚至并行编译。第三,Go包编译输出的目标文件不仅记录它自己的导出信息,还记录它所依赖包的导出信息。当编译一个包时,编译器必须从每一个导入中读取一个目标文件,但是不会超出这些文件。

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

计算机网络中的抽象

计算机网络中的抽象

罗斯.怀特
C++语言导学(原书第2版)

C++语言导学(原书第2版)

本贾尼 斯特劳斯特鲁普
量子计算机编程:从入门到实践

量子计算机编程:从入门到实践

Eric R. Johnston, Nicholas Harrigan, Mercedes Gimeno-Segovia

Publisher Resources

ISBN: 9787111558422