Mastering Go 程式基本結構體
阿新 • • 發佈:2020-12-17
Chapter3
for-loop
允許指定迭代次數
陣列、切片、對映、字串
形式1
for i := 0; i < 10; i++ {
}
注意
break 退出迴圈
continue 跳出當次迴圈,進行下一次迴圈判斷
形式2
// while
for condition {
}
// forever-loop
for {
}
// do-while
for ok := true; ok; ok = someExpression {
}
形式3
不需要知道長度
返回值中有索引
for k, v := range collection {
}
Slice
切片的底層是陣列, 不需要指定長度
切片的零值是nil
宣告
s := []int{1, 2, 3, 3}
s := make([]int, 20)
注意:自動初始化為型別的零值
make
注意:自動初始化為型別的零值
s := make([]int, 20)
appned
注意:nil的切片是可以append的
s := make([]int, 20)
s = append(s, 1)
log.Println(s)
s = append(s, []int{1, 2, 3}...)
log.Println(s)
subSlice
獲取同一個切片或者陣列的sub時,共享同樣的底層陣列
返回的切片指向底層陣列
s[1:3]
len and cap
len獲取元素個數、cap獲取切片容量
len(s)
cap(s)
位元組切片
bs := make([]byte, 1024)
a := []int{1, 2, 3, 4, 5, 6}
b := []int{7, 8, 9, 10}
copy(a, b)
log.Println(a)
log.Println(b)
copy
a := []int{1, 2, 3, 4, 5, 6}
b := []int{7, 8, 9, 10}
copy(a, b)
log.Println(a)
log.Println(b)
sort.Slice(s, func(i, j int) bool {
return s[i] > s[j]
})
Map
nil Map 無法操作
var m map[string]string
log.Println(m)
m["key"] = "value" // panic: assignment to entry in nil map
const
常量值無法改變、數字、字串、布林
通常是全域性變數,不使用也不會報錯
常量定義無須宣告型別,編譯器自動判斷
常量最好定義到一個包中
const VERSION = "1.15.5"
iota
每定義一個常量,iota+1
遇到定義一個const,iota重置0
iota是int型別可以參與運算
const (
zaro = iota
one
two
three
)
const (
B = 1 << (iota * 10)
KB
MB
GB
)
const (
a = iota
_ // 跳過宣告
c
_
e
)
Pointer
指標即是地址
&獲取非指標變數的地址
* 獲取指標的值,也稱為指標的解引用
指標可以作為引數也可以作為返回值
Time and Date
-
基本操作
t := time.Now()
log.Println(t.Weekday(), t.Year(), t.Month(), t.Day())
log.Println(t.Unix()) // unix時間是1970