1.3 基本類型
更明確的數(shù)字類型命名,支持 Unicode,支持常用數(shù)據(jù)結(jié)構(gòu)。

常用數(shù)據(jù)結(jié)構(gòu)
支持八進(jìn)制、十六進(jìn)制,以及科學(xué)記數(shù)法。標(biāo)準(zhǔn)庫(kù) math 定義了各數(shù)字類型取值范圍。
a, b, c, d := 071, 0x1F, 1e9, math.MinInt16
空指針值 nil,而非 C/C++ NULL。
1.4 引用類型
引用類型包括 slice、map 和 channel。它們有復(fù)雜的內(nèi)部結(jié)構(gòu),除了申請(qǐng)內(nèi)存外,還需要初始化相關(guān)屬性。
內(nèi)置函數(shù) new 計(jì)算類型大小,為其分配 零值內(nèi)存 ,返回指針。而 make 會(huì)被編譯器翻譯成具體的創(chuàng)建函數(shù),由其分配內(nèi)存和初始化成員結(jié)構(gòu),返回 對(duì)象 而 非指針。
a := []int{0, 0, 0} // 提供初始化表達(dá)式。
a[1] = 10
b := make([]int, 3) // make slice
b[1] = 10
c := new([]int)
c[1] = 10 // Error: invalid operation: c[1] (index of type *[]int)
有關(guān)引用類型具體的內(nèi)存布局,可參考后續(xù)章節(jié)。
1.5 類型轉(zhuǎn)換 ( 簡(jiǎn)單記錄 )
不支持隱式類型轉(zhuǎn)換,即便是從窄向?qū)掁D(zhuǎn)換也不行。
var b byte = 100
var n int = b // Error: cannot use b (type byte) as type int in assignment
var n int = int(b) // 顯式轉(zhuǎn)換
使用括號(hào)避免優(yōu)先級(jí)錯(cuò)誤。
*Point(p) // 相當(dāng)于 *(Point(p))
(*Point)(p)
<-chan int(c) // 相當(dāng)于 <-(chan int(c))
(<-chan int)(c)
同樣不能將其他類型當(dāng) bool 值使用。
a := 100
if a { // Error: non-bool a (type int) used as if condition
println("true")
}