天天看點

Go程式設計語言1.8 其他内容

<b>1.8 其他内容</b>

<b></b>

go裡面的東西遠比這個快速入門中介紹的多。這裡是一些很少提及或者完全忽略掉的主題,下面簡單地介紹一下這些主題,以便讀者在用到時能夠熟悉這些内容。

控制流:我們前面介紹了兩個基礎的控制語句if和for,但沒有介紹switch語句,它是多路分支控制。這裡有一個例子:

coinflip的調用結果會和每一個條件的值進行比較。case語句從上到下進行推演,是以第一個比對的case語句會被執行。如果沒有其他的case語句符合條件,那麼可選的預設case語句将被執行。預設case語句可以放在任何地方。case語句不像c語言那樣從上到下貫穿執行(盡管有一個很少使用的fallthrough語句可以改寫這個行為)。

switch語句不需要操作數,它就像一個case語句清單,每條case語句都是一個布爾表達式:

這種形式稱為無标簽(tagless)選擇,它等價于switch true。

與for和if語句類似,switch可以包含一個可選的簡單語句:一個短變量聲明,一個遞增或指派語句,或者一個函數調用,用來在判斷條件前設定一個值。

break和continue語句可以改變控制流。break可以打斷for、switch或select的最内層調用,開始執行下面的語句。正如我們在1.3節中看到的,continue可以讓for的内層循環開始新的疊代。語句可以标簽化,這樣友善break和continue引用它們來跳出多層嵌套的循環,或者執行最外層循環的疊代。這裡還有一個goto語句,通常在機器生成的代碼中使用,程式員一般不用它。

命名類型:type聲明給已有類型命名。因為結構體類型通常很長,是以它們基本上都獨立命名。一個熟悉的例子是定義一個2d圖形系統的point類型:

類型聲明和命名将在第2章講述。

指針:go提供了指針,它的值是變量的位址。在一些語言(比如c)中,指針基本是沒有限制的。其他語言中,指針稱為“引用”,并且除了到處傳遞之外,它不能做其他的事情。go做了一個折中,指針顯式可見。使用&amp;操作符可以擷取一個變量的位址,使用*操作符可以擷取指針引用的變量的值,但是指針不支援算術運算。這将在2.3.2節進行介紹。

方法和接口:一個關聯了命名類型的函數稱為方法。go裡面的方法可以關聯到幾乎所有的命名類型。方法在第6章講述。接口可以用相同的方式處理不同的具體類型的抽象類型,它基于這些類型所包含的方法,而不是類型的描述或實作。接口是第7章的主題。

包:go自帶一個可擴充并且實用的标準庫,go社群建立和共享了更多的庫。程式設計時,更多使用現有的包,而不是自己寫所有的源碼。本書将指出一些比較重要的标準庫包,但是這些包太多了,本書無法一一展示,并且也無法提供諸如包的完整參考手冊之類的東西。

在着手新程式前,看看是否已經有現成的包。可以在https://golang.org/pkg找到标準庫包的索引,社群貢獻的包可以在https://godoc.org找到。使用go doc工具可以友善地通過指令行通路這些文檔:

注釋:我們已經在程式或包的開始提到文檔注釋。在聲明任何函數前,寫一段注釋來說明它的行為是一個好的風格。這個約定很重要,因為它們可以被go doc和godoc工具定位和作為文檔顯示(參考10.7.4節)。

對于跨越多行的注釋,可以使用類似其他語言中的/*...*/注釋。這樣可以避免在檔案的開始有一大塊說明文本時每一行都有//。在注釋内部,//和/*沒有特殊的含義,是以注釋不能嵌套。