一、可能导致逃逸的5中情况
package mainimport "fmt"func main() {f1()f2()f3()f4()f5()
}type animal interface {run()
}type dog struct{}func (d *dog) run() {fmt.Println("狗在跑")
}
func f1() (*int, map[int]int, []int) {i := 1list := []int{1, 2, 3}m := map[int]int{1: 1, 2: 2, 3: 3}return &i, m, list
}
func f2() {i := 2ch := make(chan *int, 2)ch <- &i<-ch
}
func f3() func() {i := 3return func() {fmt.Println(i)}
}
func f4() {i := 1list := make([]*int, 2)list[0] = &i
}
func f5() {var a animal = &dog{}a.run()var b animalb = &dog{}b.run()
}
二、对逃逸进行分析
go build -gcflags -m ./main.go
