回到简体

This commit is contained in:
chai2010
2016-02-15 11:06:34 +08:00
parent 9e878f9944
commit 2b37b23285
177 changed files with 2354 additions and 2354 deletions

View File

@@ -1,9 +1,9 @@
## 10.1. 包
## 10.1. 包
任何包繫統設計的目的都是爲了簡化大型程序的設計和維護工作,通過將一組相關的特性放進一個獨立的元以便理解和更新,在每個單元更新的同保持和程序中其它元的相對獨立性。這種模塊化的特性允許每個包可以被其它的不同目共享和重用,在目范圍內、甚至全球范圍統一的分發和複用。
任何包系统设计的目的都是为了简化大型程序的设计和维护工作,通过将一组相关的特性放进一个独立的元以便理解和更新,在每个单元更新的同保持和程序中其它元的相对独立性。这种模块化的特性允许每个包可以被其它的不同目共享和重用,在目范围内、甚至全球范围统一的分发和复用。
包一般都定了一不同的名字空間用於它內部的每個標識符的訪問。每名字空間關聯到一特定的包,讓我們給類型、函數等選擇簡短明了的名字,這樣可以避免在我使用它們的時候減少和其它部分名字的突。
包一般都定了一不同的名字空间用于它内部的每个标识符的访问。每名字空间关联到一特定的包,让我们给类型、函数等选择简短明了的名字,这样可以避免在我使用它们的时候减少和其它部分名字的突。
個包還通過控製包內名字的可性和是否導出來實現封裝特性。通過限製包成的可見性併隱藏包API的具體實現,將允許包的維護者在不影外部包用的前提下調整包的內部實現。通過限製包內變量的可性,可以強製用戶通過某些特定函數來訪問和更新內部變量,這樣可以保證內部變量的一致性和併發時的互斥束。
个包还通过控制包内名字的可性和是否导出来实现封装特性。通过限制包成的可见性并隐藏包API的具体实现,将允许包的维护者在不影外部包用的前提下整包的内部实现。通过限制包内变量的可性,可以强制用户通过某些特定函数来访问和更新内部变量,这样可以保证内部变量的一致性和并发时的互斥束。
當我們脩改了一源文件,我們必須重新編譯該源文件對應的包和所有依賴該包的其他包。使是從頭構Go語言編譯器的編譯速度也明顯快於其它編譯語言。Go言的閃電般的編譯速度主要得益於三個語言特性。第一,所有入的包必在每文件的開頭顯式聲明,這樣的話編譯器就有必要取和分析整源文件來判斷包的依賴關繫。第二,禁止包的環狀依賴,因爲沒有循環依賴,包的依賴關繫形成一有向無環圖,每包可以被獨立編譯,而且很可能是被併發編譯。第三點,編譯後包的目文件不僅僅記録包本身的出信息,目文件同時還記録了包的依賴關繫。因此,在編譯一個包的候,編譯器隻需要取每直接入包的目文件,而不需要遍所有依的的文件(譯註:很多都是重複的間接依)。
当我们修改了一源文件,我们必须重新编译该源文件对应的包和所有依赖该包的其他包。使是从头构Go语言编译器的编译速度也明显快于其它编译语言。Go言的闪电般的编译速度主要得益于三个语言特性。第一,所有入的包必在每文件的开头显式声明,这样的话编译器就有必要取和分析整源文件来判断包的依赖关系。第二,禁止包的环状依赖,因为没有循环依赖,包的依赖关系形成一有向无环图,每包可以被独立编译,而且很可能是被并发编译。第三点,编译后包的目文件不仅仅记录包本身的出信息,目文件同时还记录了包的依赖关系。因此,在编译一个包的候,编译器只需要取每直接入包的目文件,而不需要遍所有依的的文件(译注:很多都是重复的间接依)。