var k int = 1
var s = []int{1,2}
多重賦值分為兩個步驟,有先后順序,
算等號左邊的索引表達式和取址表達式跪帝,接著計算等號右邊的表達式;賦值運算等同于 k, s[1] = 0, 3透硝。
k, s[k] = 0, 3
fmt.Println(s[0] + s[1])
輸出是4
defer func() {
//這是捕獲panic(2)的地方
fmt.Print(recover())
}()
defer func() {
//recover只在第一層defer函數(shù)中對外層的panic起作用
defer func() {
fmt.Print(recover())
}()
panic(1)
}()
//defer recover()
panic(2)
上面這段代碼輸出的是12
type Slice []int
func NewSlice() Slice {
return make(Slice_,0)
}
s := NewSlice()
defer s.Add(2).Add(1).Add(4)
s.Add(3)
只把最終的函數(shù)放到defer棧中,因此 defer s.Add(1).Add(2).Add(4)等價于下面2句了
s.Add(1)
s.Add(2)
defer s.Add(4),最終輸出2134