🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> ### defer * defer只是用来做clean up的,要是在里面写业务逻辑,就进坑了 * 闭包内是一个生命周期 ~~~ package main import "fmt" func main() { func() { defer fmt.Println("11111") defer fmt.Println("22222") }() defer fmt.Println("33333") defer fmt.Println("44444") defer func() { fmt.Println("55555") fmt.Println("66666") }() } ~~~ * * * ~~~ package main import "fmt" func f1() { defer fmt.Println("f1-begin") f2() defer fmt.Println("f1-end") } func f2() { defer fmt.Println("f2-begin") f3() defer fmt.Println("f2-end") } func f3() { defer fmt.Println("f3-begin") panic(0) defer fmt.Println("f3-end") } func main() { f1() } ~~~ * * * * defer 注册的是最后一个函数调用 ~~~ package main import "fmt" type Slice []int func NewSlice() Slice { return make(Slice, 0) } func (s *Slice) Add(elem int) *Slice { *s = append(*s, elem) fmt.Println(elem) return s } func main() { s := NewSlice() defer s.Add(1).Add(2) s.Add(3) } ~~~