基本數(shù)據(jù)類型
符合類型:array slice map function pointer struct interface channel
布爾型:bool true/false fmt.Printf("%T, %t", )
數(shù)值: int融蹂、float32画切、float64 complex(復(fù)數(shù))
字符串 string
派生類型
(a) 指針類型(Pointer)
(b) 數(shù)組類型
(c) 結(jié)構(gòu)化類型(struct)
(d) Channel 類型
(e) 函數(shù)類型
(f) 切片類型
(g) 接口類型(interface)
(h) Map 類型
數(shù)組和切片的區(qū)分恳邀,主要在于是否確定長(zhǎng)度
var variable_name [SIZE] variable_type
傳遞參數(shù) func getArr(param [10] int)
切片 var identifier []type 不需要定義長(zhǎng)度
slice1 := make([]type, len) 使用make關(guān)鍵字
s :=[] int {1,2,3 }
數(shù)組轉(zhuǎn)切片 var balance [10] float32
var balance1 [5]int{1, 2, 3, 4, 5}
定義確定長(zhǎng)度兩種方式袍祖,一種是定義的時(shí)候直接設(shè)置長(zhǎng)度,另一種是定義并初始化時(shí)確定長(zhǎng)度
var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
var b = balance[1:3]
整形、浮點(diǎn)型默認(rèn)0
字符串: ""
iota
特殊的常量
ota 可以被用作枚舉值:
const (
a = iota
b = iota
c = iota
)
第一個(gè) iota 等于 0,每當(dāng) iota 在新的一行被使用時(shí),它的值都會(huì)自動(dòng)加 1杜窄;所以 a=0, b=1, c=2
注意點(diǎn):
- 如果中斷iota自增,則必須顯式恢復(fù)算途。且后續(xù)自增值按行序遞增
- 自增默認(rèn)是int類型塞耕,可以自行進(jìn)行顯示指定類型
- 數(shù)字常量不會(huì)分配存儲(chǔ)空間,無須像變量那樣通過內(nèi)存尋址來取值嘴瓤,因此無法獲取地址
結(jié)構(gòu)體類型
數(shù)組可以存儲(chǔ)同一類型的數(shù)據(jù)扫外,但在結(jié)構(gòu)體中我們可以為不同項(xiàng)定義不同的數(shù)據(jù)類型莉钙,結(jié)構(gòu)體有普通結(jié)構(gòu)體和指針結(jié)構(gòu)體。
普通結(jié)構(gòu)體的定義和初始化
type struct_variable_type struct {
member definition;
member definition;
...
member definition;
}
一旦定義了結(jié)構(gòu)體類型筛谚,它就能用于變量的聲明
variable_name := structure_variable_type {value1, value2...valuen}
初始化結(jié)構(gòu)體
// 1.按照順序提供初始化值
P := person{"Tom", 25}
// 2.通過field:value的方式初始化磁玉,這樣可以任意順序
P := person{age:24, name:"Tom"}
// 3.new方式,未設(shè)置初始值的,會(huì)賦予類型的默認(rèn)初始值
p := new(person)
p.age=24
結(jié)構(gòu)體指針
var struct_pointer *Books
以上定義的指針變量可以存儲(chǔ)結(jié)構(gòu)體變量的地址驾讲。查看結(jié)構(gòu)體變量地址蚊伞,可以將 & 符號(hào)放置于結(jié)構(gòu)體變量前
struct_pointer = &Book1;
使用結(jié)構(gòu)體指針訪問結(jié)構(gòu)體成員,使用 "." 操作符