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函数中对外层的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)
只把最终的函数放到defer栈中,因此 defer s.Add(1).Add(2).Add(4)等价于下面2句了
s.Add(1)
s.Add(2)
defer s.Add(4),最终输出2134