新聞中心
包(package)是多個(gè) Go 源碼的集合,是一種高級(jí)的代碼復(fù)用方案,像 fmt、os、io 等這樣具有常用功能的內(nèi)置包在 Go語(yǔ)言中有 150 個(gè)以上,它們被稱為標(biāo)準(zhǔn)庫(kù),大部分(一些底層的除外)內(nèi)置于 Go 本身。

成都創(chuàng)新互聯(lián)公司10多年成都定制網(wǎng)站服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及高端網(wǎng)站定制服務(wù),成都定制網(wǎng)站及推廣,對(duì)社區(qū)文化墻等多個(gè)領(lǐng)域擁有豐富的網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。
包要求在同一個(gè)目錄下的所有文件的第一行添加如下代碼,以標(biāo)記該文件歸屬的包:
package 包名
包的特性如下:
- 一個(gè)目錄下的同級(jí)文件歸屬一個(gè)包。
- 包名可以與其目錄不同名。
- 包名為 main 的包為應(yīng)用程序的入口包,編譯源碼沒(méi)有 main 包時(shí),將無(wú)法編譯輸出可執(zhí)行的文件。
任何包系統(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è)特定的包,讓我們給類型、函數(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ù)者在不影響外部包用戶的前提下調(diào)整包的內(nèi)部實(shí)現(xiàn)。通過(guò)限制包內(nèi)變量的可見(jiàn)性,還可以強(qiáng)制用戶通過(guò)某些特定函數(shù)來(lái)訪問(wèn)和更新內(nèi)部變量,這樣可以保證內(nèi)部變量的一致性和并發(fā)時(shí)的互斥約束。
當(dāng)我們修改了一個(gè)源文件,我們必須重新編譯該源文件對(duì)應(yīng)的包和所有依賴該包的其他包。即使是從頭構(gòu)建,Go語(yǔ)言編譯器的編譯速度也明顯快于其它編譯語(yǔ)言。Go語(yǔ)言的閃電般的編譯速度主要得益于三個(gè)語(yǔ)言特性。
- 第一點(diǎn),所有導(dǎo)入的包必須在每個(gè)文件的開頭顯式聲明,這樣的話編譯器就沒(méi)有必要讀取和分析整個(gè)源文件來(lái)判斷包的依賴關(guān)系。
- 第二點(diǎn),禁止包的環(huán)狀依賴,因?yàn)闆](méi)有循環(huán)依賴,包的依賴關(guān)系形成一個(gè)有向無(wú)環(huán)圖,每個(gè)包可以被獨(dú)立編譯,而且很可能是被并發(fā)編譯。
- 第三點(diǎn),編譯后包的目標(biāo)文件不僅僅記錄包本身的導(dǎo)出信息,目標(biāo)文件同時(shí)還記錄了包的依賴關(guān)系。因此,在編譯一個(gè)包的時(shí)候,編譯器只需要讀取每個(gè)直接導(dǎo)入包的目標(biāo)文件,而不需要遍歷所有依賴的的文件。
網(wǎng)站欄目:創(chuàng)新互聯(lián)GO教程:Go語(yǔ)言package(創(chuàng)建包)
當(dāng)前地址:http://www.5511xx.com/article/dpcdjso.html


咨詢
建站咨詢
