以下筆記摘錄自『 The Go Workshop 』。
Go語言是強型別(strongly typed)語言,意即所有的資料都必須屬於某個型別,而且這個型別是固定的、無法變更的。對資料可做或不可做的事,都取決於資料的型別。
像Python, Javascript等語言其變數可以隨意變換型別,所以被稱為弱型別(weakly typed)語言。另一種分法是『靜態型別』(statically typed)與『動態型別』(dynamically typed):前者在編譯時檢查型別,後者則在執行階段才檢查型別。
真與偽這兩個邏輯值都屬於布林(boolean),Go語言寫成bool。當程式碼需要非黑即白的判斷式時就可以使用。
For example,
package main
import "fmt"
func main() {
fmt.Println(10 > 5)
fmt.Println(10 == 5)
}
// Output
true
false
Go語言中有兩種數:整數(integers)和浮點數(floating-point numbers)。
分成兩種,可以儲存負值的型別稱為有號整數(signed number),無法存負值的型別稱為無號整數(unsigned number),每一種可儲存的最小和最大值都取決於型別的內部儲存容量有幾個位元組。
(圖片參考)
byte是unit8的別稱,rune是unit32的別稱
特殊的整數型別,unit - 無號32或64位元整數,int - 有號32或64位元整數。長度是32還是64取決元在哪一種位元系統編譯程式。在64位元系統上,int型別和int64的整數範圍就會完全一樣,但Go將他們視為兩種不同的型別。
int能完成大部分的工作,只有當int會造成問題時,才考慮其他型別。與int有關的問題,多半都跟記憶體用量有關。
假設某個應用程式把記憶體耗光了,因為宣告了大量整數,但這些數字永遠是正整數、也未超過255,此時可能的解法是把型別從int改成unit8,這樣可以把每個數字佔用的記憶體從64位元小少到8位元
一開始使用int來處理整數是OK的,等到它造成性能問題時再來考慮更換型別。
Go語言有兩種浮點數型別,float32:用32個位元來儲存數值,與float64:用64個位元來儲存數值,float64容量較大,精確度也較高,需要在精確度與儲存空間做出取捨。
package main
import "fmt"
func main() {
var a int = 100
var b float32 = 100
var c float64 = 100
fmt.Println((a / 3) * 3)
fmt.Println((b / 3) * 3)
fmt.Println((c / 3) * 3)
}
// Output
33
33.333332
33.333333333333336
浮點數得實用性在於,若有一直重複乘除的動作,誤差可能會因此逐漸放大,所以除非想進一步節省記憶體用量,否則一般建立浮點數時,首選都是floart64。
package main
import "fmt"
func main() {
var a int = 100
var b float32 = 100
var c float64 = 100
fmt.Println((a / 3) * 3)
fmt.Println((b / 3) * 3)
fmt.Println((c / 3) * 3)
}
// Output
99
100
100