數據類型
- 數組:數組長度固定,是引用類型
- 切片:長度可以變更,是引用類型
- map:是一種數據結構,引用類型
- channel:管道,主要用於協成之間傳遞數據,引用類型
defer
- 函數中有多個
defer
的時候按照先入後出準則 defer
在函數返回之後執行
例子
func main() {
defer func() {
fmt.Println(1)
}()
defer func() {
fmt.Println(2)
}()
fmt.Println(3)
}
最後打印出321
func def() (t int) {
defer func() {
t++
}()
return 5
}
func main() {
fmt.Println(def())
}
最後打印出 6
func def(i int) int {
defer func() {
i++
}()
return i
}
func main() {
fmt.Println(def(1))
}
最後打印出 1
recover
處理panic,使用方法
defer func() {
fmt.Println("Try to recover the panic")
if p := recover();p!=nil{
fmt.Println("recover the panic : ",p)
}
}()
json tag
- json解析忽略某個字段,可以將首字母小寫,也可以
json:"-"
- omitempty:當字段爲空(默認值)時,不要解析這個字段。比如 false、0、nil、長度爲 0 的 array,map,slice,string
- 重命名字段名,
json:"FiledName"
鎖
- Mutex: 當一個goroutine獲得了Mutex後,其他goroutine就只能乖乖的等待,除非該goroutine釋放這個Mutex
- RWMutex在讀鎖佔用的情況下,會阻止寫,但不阻止讀
- RWMutex在寫鎖佔用情況下,會阻止任何其他goroutine(無論讀和寫)進來,整個鎖相當於由該goroutine獨佔