W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
原文鏈接:https://gopl-zh.github.io/ch10/ch10-01.html
任何包系統(tǒng)設(shè)計(jì)的目的都是為了簡(jiǎn)化大型程序的設(shè)計(jì)和維護(hù)工作,通過(guò)將一組相關(guān)的特性放進(jìn)一個(gè)獨(dú)立的單元以便于理解和更新,在每個(gè)單元更新的同時(shí)保持和程序中其它單元的相對(duì)獨(dú)立性。這種模塊化的特性允許每個(gè)包可以被其它的不同項(xiàng)目共享和重用,在項(xiàng)目范圍內(nèi)、甚至全球范圍統(tǒng)一的分發(fā)和復(fù)用。
每個(gè)包一般都定義了一個(gè)不同的名字空間用于它內(nèi)部的每個(gè)標(biāo)識(shí)符的訪問(wèn)。每個(gè)名字空間關(guān)聯(lián)到一個(gè)特定的包,讓我們給類(lèi)型、函數(shù)等選擇簡(jiǎn)短明了的名字,這樣可以在使用它們的時(shí)候減少和其它部分名字的沖突。
每個(gè)包還通過(guò)控制包內(nèi)名字的可見(jiàn)性和是否導(dǎo)出來(lái)實(shí)現(xiàn)封裝特性。通過(guò)限制包成員的可見(jiàn)性并隱藏包API的具體實(shí)現(xiàn),將允許包的維護(hù)者在不影響外部包用戶(hù)的前提下調(diào)整包的內(nèi)部實(shí)現(xiàn)。通過(guò)限制包內(nèi)變量的可見(jiàn)性,還可以強(qiáng)制用戶(hù)通過(guò)某些特定函數(shù)來(lái)訪問(wèn)和更新內(nèi)部變量,這樣可以保證內(nèi)部變量的一致性和并發(fā)時(shí)的互斥約束。
當(dāng)我們修改了一個(gè)源文件,我們必須重新編譯該源文件對(duì)應(yīng)的包和所有依賴(lài)該包的其他包。即使是從頭構(gòu)建,Go語(yǔ)言編譯器的編譯速度也明顯快于其它編譯語(yǔ)言。Go語(yǔ)言的閃電般的編譯速度主要得益于三個(gè)語(yǔ)言特性。第一點(diǎn),所有導(dǎo)入的包必須在每個(gè)文件的開(kāi)頭顯式聲明,這樣的話(huà)編譯器就沒(méi)有必要讀取和分析整個(gè)源文件來(lái)判斷包的依賴(lài)關(guān)系。第二點(diǎn),禁止包的環(huán)狀依賴(lài),因?yàn)闆](méi)有循環(huán)依賴(lài),包的依賴(lài)關(guān)系形成一個(gè)有向無(wú)環(huán)圖,每個(gè)包可以被獨(dú)立編譯,而且很可能是被并發(fā)編譯。第三點(diǎn),編譯后包的目標(biāo)文件不僅僅記錄包本身的導(dǎo)出信息,目標(biāo)文件同時(shí)還記錄了包的依賴(lài)關(guān)系。因此,在編譯一個(gè)包的時(shí)候,編譯器只需要讀取每個(gè)直接導(dǎo)入包的目標(biāo)文件,而不需要遍歷所有依賴(lài)的的文件(譯注:很多都是重復(fù)的間接依賴(lài))。
![]() | ![]() |
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: