《Go 語言實戰(zhàn)》摘抄

第 19 頁

在 Go 語言中,所有的變量都以值得方式傳遞。因為指針變量的值是所指向的內(nèi)存地址,在函數(shù)間傳遞指針變量,是在傳遞這個地址值,所以依舊被看作以值得方式在傳遞。

第 39 頁

可以訪問 http://golang.org/pkg/fmt/ 或者在終端輸入 godoc fmt 來了解更多關(guān)于 fmt 包的細節(jié)。

第 40 頁

使用分布式版本控制系統(tǒng)(Distributed Version Control System,DVCS)來分享代碼,如 GitHub、Launchpad 還有 Bitbucket。Go 語言的工具鏈本身就支持從這些網(wǎng)站及類似網(wǎng)站獲取源代碼。

第 44 頁

go vet 命令會幫開發(fā)人員檢測代碼的常見錯誤。

第 46 頁

Go 語言有兩種方法為開發(fā)者生成文檔。可以在終端上直接使用 go doc 命令來打印文檔。可以使用 godoc 程序來啟動一個 Web 服務器,通過點擊的方式來查看 Go 語言的包的文檔。

go doc tar

godoc -http=:6060(這個命令通知 godoc 在端口 6060 啟動 Web 服務器。如果瀏覽器已經(jīng)打開,導航到 http://localhost:6060 可以看到一個頁面,包含所有 Go 標準庫和你的 GOPATH 下的 Go 源代碼的文檔)

第 53 頁

在 Go 語言里,數(shù)組是一個長度固定的數(shù)據(jù)類型,用于存儲一段具有相同的類型的元素的連續(xù)塊。
因為其占用的內(nèi)存是連續(xù)分配的,由于內(nèi)存連續(xù),CPU 能把正在使用的數(shù)據(jù)緩存更久的時間。而且內(nèi)存連續(xù)很容易計算索引,可以快速迭代數(shù)組里的所有元素。數(shù)組的類型信息可以提供每次訪問一個元素時需要在內(nèi)存中移動的距離。既然數(shù)組的每個元素類型相同,又是連續(xù)分配,就可以以固定速度索引數(shù)組中的任意數(shù)據(jù),速度非常快。

第 56 頁

在 Go 語言里,數(shù)組是一個值。這意味著數(shù)組可以用在賦值操作中。變量名代表整個數(shù)組,因此,同樣類型的數(shù)組可以賦值給另一個數(shù)組,復制之后,兩個數(shù)組的值完全一樣。
數(shù)組變量的類型包括數(shù)組長度和每個元素的類型。只有這兩部分都相同的數(shù)組,才是類型相同的數(shù)組,才能互相賦值。
復制指針數(shù)組,只會復制指針的值,而不會復制指針所指向的值,復制之后,兩個數(shù)組指向同一組字符串。

第 58 - 62 頁

數(shù)組本身只有一個維度,不過可以組合多個數(shù)組創(chuàng)建多維數(shù)組。多維數(shù)組很容易管理具有父子關(guān)系的數(shù)據(jù)或者與坐標系相關(guān)聯(lián)的數(shù)據(jù)。
只要類型一致,就可以將多維數(shù)組互相賦值,多維數(shù)組的類型包括每一維度的長度以及最終存儲在元素中的數(shù)據(jù)的類型。
因為每個數(shù)組都是一個值,所以可以獨立復制某個維度。

根據(jù)內(nèi)存和性能來看,在函數(shù)間傳遞數(shù)組是一個開銷很大的操作。在函數(shù)之間傳遞變量時,總是以值的方式傳遞的。如果這個變量是一個數(shù)組,意味著整個數(shù)組,不管有多長,都會完整復制,并傳遞給函數(shù)。

切片是一種數(shù)據(jù)結(jié)構(gòu),這種數(shù)據(jù)結(jié)構(gòu)便于使用和管理數(shù)據(jù)集合。切片是圍繞動態(tài)數(shù)組的概念構(gòu)建的,可以按需自動增長和縮小。切片的動態(tài)增長是通過內(nèi)置函數(shù)append來實現(xiàn)的。這個函數(shù)可以快速且高效地增長切片。還可以通過對切片再次切片來縮小一個切片的大小。因為切片的底層內(nèi)存也是在連續(xù)塊中分配的,所有切片還能獲得索引、迭代以及為垃圾回收優(yōu)化的好處。

切片有 3 個字段的數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)包含 Go 語言需要操作底層數(shù)組的元數(shù)據(jù)。這 3 個字段分別是指向底層數(shù)組的指針、切片訪問的元素的個數(shù)(即長度)和切片允許增長到的元素個數(shù)(即容量)。

使用內(nèi)置的make函數(shù)創(chuàng)建切片時,需要傳入一個參數(shù),指定切片的長度.如果只指定長度,那么切片的容量和長度相等。也可以分別制定長度和容量,創(chuàng)建的切片,底層數(shù)組的長度是指定的容量,但是初始化后并不能訪問所有的數(shù)組元素。不允許創(chuàng)建容量小于長度的切片,容量小于長度的切片會在編譯時報錯。

如果在[]運算符里指定了一個值,那么創(chuàng)建的就是數(shù)組而不是切片。只有不指定值的時候,才會創(chuàng)建切片。

第 64 頁

切片之所以被稱為切片,是因為創(chuàng)建一個新的切片就是把底層數(shù)組切出一部分。

第 66 頁

函數(shù)append總是會增加新切片的長度,而容量有可能會改變,也可能不會改變,這取決于被操作的切片的可用容量。

第 68 頁

函數(shù)append會智能地處理底層數(shù)組的容量增長。在切片的容量小于 1000 個元素時,總是會成倍地增加容量。一旦元素個數(shù)超過 1000,容量的增長因子會設(shè)為 1.25,也就是會每次增加 25% 的容量。隨著語言的演化,這種增長算法可能會有所改變。

第 75 頁

在函數(shù)間傳遞切片就是要在函數(shù)間以值的方式傳遞切片。由于切片的尺寸很小,在函數(shù)間復制和傳遞切片成本也很低。

在 64 位架構(gòu)的機器上,一個切片需要 24 字節(jié)的內(nèi)存:指針字段需要 8 字節(jié),長度和容量字段分別需要 8 字節(jié)。由于與切片關(guān)聯(lián)的數(shù)據(jù)包含在底層數(shù)組里,不屬于切片本身,所以將切片復制到任意函數(shù)的時候,對底層數(shù)組大小都不會有影響。復制時只會復制切片本身,不會涉及底層數(shù)組。

第 78 頁

切片、函數(shù)以及包含切片的結(jié)構(gòu)類型這些類型由于具有引用語義,不能作為映射的鍵,使用這些類型會造成編譯錯誤。

第 83 - 84 頁

Go 語言是一種靜態(tài)類型的編程語言,意味著編譯器需要在編譯時知曉程序里每個值的類型。

值的類型給編譯器提供兩部分信息:一,需要分配多少內(nèi)存給這個值(即值的規(guī)模);二,這段內(nèi)存表示什么。對于許多內(nèi)置類型的情況來說,規(guī)模和表示是類型名的一部分。int64 類型的值需要 8 字節(jié)(64 位),表示一個整數(shù)值;float32類型的值需要 4 字節(jié)(32 位),表示一個 IEEE-754 定義的二進制浮點數(shù);bool類型的值需要 1 字節(jié)(8 位),表示布爾值 truefalse

有些類型的內(nèi)部表示與編譯代碼的機器的體系結(jié)構(gòu)有關(guān)。例如,根據(jù)編譯所在的機器的體系結(jié)構(gòu),一個 int值的大小可能是 8 字節(jié)(64 位),也可能是 4 字節(jié)(32 位)。還要一些與體系結(jié)構(gòu)相關(guān)的類型,如 Go 語言里的所有引用類型。

使用 var 創(chuàng)建一個變量并初始化其為零值。如果變量被初始化為某個非零值,就配合結(jié)構(gòu)字面量和短變量聲明操作符來創(chuàng)建變量。

一個短變量聲明操作符在一次操作中完成兩件事情:聲明一個變量,并初始化。

第 88 頁

Go 語言里有兩種類型的接收者:值接收者和指針接收者。

第 90 - 92 頁

Go 語言既允許使用值,也允許使用指針來調(diào)用方法,不必嚴格符合接收者的類型。這個支持非常方便開發(fā)者編寫程序。

內(nèi)置類型分別是數(shù)值類型字符串類型布爾類型。這些類型本質(zhì)上是原始的類型。因此,當對這些值進行增加或者刪除的時候,會創(chuàng)建一個新值。基于這個結(jié)論,當把這些類型的值傳遞給方法或者函數(shù)時,應該傳遞一個對應值的副本。

引用類型切片映射通道接口函數(shù)類型。當聲明上述類型的變量時,創(chuàng)建的變量被稱為標頭(header)值。從技術(shù)細節(jié)上說,字符串也是一種引用類型。每個引用類型創(chuàng)建的標頭值是包含一個指向底層數(shù)據(jù)結(jié)構(gòu)的指針。每個引用類型還包含一組獨特的字段,用于管理底層數(shù)據(jù)結(jié)構(gòu)。因為標頭值是為復制而設(shè)計的,所以永遠不需要共享一個引用類型的值。標頭值里包含一個指針,因此通過復制來傳遞一個引用類型的值的副本,本質(zhì)上就是在共享底層數(shù)據(jù)結(jié)構(gòu)。

第 122 頁

Go 語言里的并發(fā)指的是能讓某個函數(shù)獨立于其他函數(shù)運行的能力。當一個函數(shù)創(chuàng)建為 goroutine 時,Go 會將其視為一個獨立的工作單元。這個單元會被調(diào)度到可用的邏輯處理器上執(zhí)行。Go 語言運行時的調(diào)度器是一個復雜的軟件,能管理被創(chuàng)建的所有 goroutine 并為其分配執(zhí)行時間。這個調(diào)度器在操作系統(tǒng)之上,將操作系統(tǒng)的線程與語言運行時的邏輯處理器綁定,并在邏輯處理器上運行 goroutine。調(diào)度器在任何給定的時間,都會全面控制哪個 goroutine 要在哪個邏輯處理器上運行。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,546評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,570評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,505評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,017評論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,786評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,219評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,438評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,971評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,796評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,995評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,230評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,918評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,697評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內(nèi)容