type Slice []int
func NewSlice() Slice {
return make(Slice, 0)
}
func (s* Slice) Add(elem int) *Slice {
*s = append(*s, elem)
fmt.Print(elem)
return s
}
func main() {
s := NewSlice()
defer s.Add(1).Add(2)
s.Add(3)
这段代码返回的结果是 132,一直不明白为什么返回的是132,如果不加Add(2)就返回的是 31,加了后defer怎么就跑前面去执行的,一直没弄明白,
谁能开导开导我。。
你好,defer后如果是链式调用,执行Add(1)后,Add(2)被推入延迟调用堆栈并接着执行下一行,顺序是:s.Add(1)---s.Add(3)---.Add(2)
如果没有.Add(2),则遇到defer会延迟执行,结果就是31
比如再弄复杂点:
defer s.Add(1).Add(2).Add(3)
s.Add(4).Add(5)
则结果就是12453
如果换一种defer形态:defer func(){}()执行结果也会不一样哦
推荐好文:https://lan6193.blog.csdn.net/article/details/116135025 特点讲的很清楚,你一看就懂
如果有有帮助,欢迎采纳哦!