go語言聖經-聲明1.四種類型的聲明語句:var、const、type和func,分別對應變數、常量、類型和函數實體對象的聲明2.包一級聲明語句聲明的名字可在整個包對應的每個源文件中訪問,局部聲明的名字就只能在函數內部很小的範圍被訪問 go語言聖經-變數1.var 變數名字 類型 = 表達式2.零值 ...
go語言聖經-聲明
1.四種類型的聲明語句:var、const、type和func,分別對應變數、常量、類型和函數實體對象的聲明
2.包一級聲明語句聲明的名字可在整個包對應的每個源文件中訪問,局部聲明的名字就只能在函數內部很小的範圍被訪問
go語言聖經-變數
1.var 變數名字 類型 = 表達式
2.零值初始化機制,數值類型零值是0,布爾類型變數對應的零值是false,字元串類型對應的零值是空字元串,介面或引用類型(包括slice、指針、map、chan和函數)變數對應的零值是nil
3.同時聲明一組變數,用逗號分隔
4.簡短變數聲明 := ,只有對已經在同級詞法域聲明過的變數才和賦值操作語句等價
5.一個指針的值是另一個變數的地址,指針名字為p,那麼可以說“p指針指向變數x”,或者說“p指針保存了x變數的記憶體地址”
6.聚合類型每個成員,可以被取地址
7.函數返回局部變數的地址也是安全的
8.將指針作為參數調用函數,那將可以在函數中通過該指針來更新變數的值。
9.我們對一個變數取地址,或者複製指針,我們都是為原變數創建了新的別名
10.指針是實現標準庫中flag包的關鍵技術,它使用命令行參數來設置對應變數的值
11.另一個創建變數的方法是調用用內建的new函數,new(T)將創建一個T類型的匿名變數,初始化為T類型的零值,然後返回變數地址,返回的指針類型為*T
12.變數的生命周期指的是在程式運行期間變數有效存在的時間間隔
13.從每個包級的變數和每個當前運行函數的每一個局部變數開始,通過指針或引用的訪問路徑遍歷,是否可以找到該變數。如果不存在這樣的訪問路徑,那麼說明該變數是不可達的,也就是說它是否存在並不會影響程式後續的計算結果
14.一個迴圈迭代內部的局部變數的生命周期可能超出其局部作用域。同時,局部變數可能在函數返回之後依然存在。
15.局部變數從函數中逃逸,該局部變數必須在堆上分配
go語言聖經-賦值
1.元組賦值是另一種形式的賦值語句,它允許同時更新多個變數的值,用法交換兩個變數的值
2.最大公約數(GCD演算法),計算斐波納契數列(Fibonacci)的第N個數 更加簡潔
3.表達式太複雜的話,應該儘量避免過度使用元組賦值;調用一個有多個返回值的函數,可以使用元組賦值,額外的返回值來表達某種錯誤類型,可以用下劃線空白標識符_來丟棄不需要的值
4.程式中還有很多地方會發生隱式的賦值行為:函數傳參,複合類型的字面量
go語言聖經-類型
1.type 類型名字 底層類型 類型聲明語句
2.類型聲明語句一般出現在包一級,因此如果新創建的類型名字的首字元大寫,則在外部包也可以使用
3.命名類型還可以為該類型的值定義新的行為
4.許多類型都會定義一個String方法,因為當使用fmt包的列印方法時,將會優先使用該類型對應的String方法返回的結果列印
5.顯式轉型操作,每一個類型T,都有一個對應的類型轉換操作T(x),用於將x轉為T類型
go語言聖經-包和文件
1.Go語言中的包和其他語言的庫或模塊的概念類似,目的都是為了支持模塊化、封裝、單獨編譯和代碼重用
2.每個包都對應一個獨立的名字空間
3.如果一個名字是大寫字母開頭的,那麼該名字是導出的
練習 2.1: 向tempconv包添加類型、常量和函數用來處理Kelvin絕對溫度的轉換,Kelvin 絕對零度是−273.15°C,Kelvin絕對溫度1K和攝氏度1°C的單位間隔是一樣的。
1.設置GOPATH
export GOPATH=$HOME/gobook
2.
將要導入的包源代碼放在 GOPATH/src/包名 這個目錄下
/home/ubuntu/gobook/src/tempconv/tempconv.go
package tempconv import( "fmt" ) //攝氏度類型聲明 type Ce float64 //Kelvin類型 type Kelvin float64 //常量聲明 const ( FreezingK Kelvin=0// 結冰點溫度 Boilingk Kelvin=100// 沸水溫度 AbsoluteZeroK Kelvin=-273.15//Kelvin的絕對零度 ) //攝氏度轉成Kelvin func CtoK(c Ce) Kelvin{ c=c+273.15 //顯式類型轉換 return Kelvin(c) } //Kelvin轉成攝氏度 func KtoC(k Kelvin) Ce{ k=k-273.15 //顯式類型轉換 return Ce(k) } //類型的String方法 func (c Ce)String() string{ return fmt.Sprintf("%g °c",c) } //Kelvin類型的String方法 func (k Kelvin)String() string{ return fmt.Sprintf("%g °k",k) }
test.go導入調用上面的包
package main import( "tempconv" "fmt" ) func main(){ //練習 2.1: 向tempconv包添加類型、常量和函數用來處理Kelvin絕對溫度的轉換,Kelvin 絕對零度是−273.15°C,Kelvin絕對溫度1K和攝氏度1°C的單位 間隔是一樣的。 //顯式類型轉換 a:=tempconv.Ce(tempconv.AbsoluteZeroK) b:=tempconv.CtoK(a) fmt.Println(b) c:=tempconv.KtoC(100) fmt.Println(c) }