package main import "fmt" // 全局变量,存储Person指针 var globalPerson *Person2 // 全局切片,存储Person指针 var globalPersonSlice []*Person2 type Person2 struct { Name string Age int } // storePerson 接收指针参数并返回,触发逃逸 func storePerson(p *Person2) *Person2 { return p // 指针被返回,触发逃逸 } // addToGlobal 将指针存入全局变量,触发逃逸 func addToGlobal() { p := &Person2{Name: "Bob", Age: 30} globalPerson = p // 存入全局变量,p逃逸 } // addToGlobalSlice 将指针存入全局切片,触发逃逸 func addToGlobalSlice() { for i := 0; i < 3; i++ { p := &Person2{Name: fmt.Sprintf("Person%d", i), Age: 20 + i} globalPersonSlice = append(globalPersonSlice, p) // p逃逸至切片 } } func main() { p := &Person2{Name: "Charlie", Age: 28} storedP := storePerson(p) fmt.Printf("引用传递:%+v\n", *storedP) addToGlobal() fmt.Printf("全局变量存储:%+v\n", *globalPerson) addToGlobalSlice() fmt.Printf("全局切片存储:%d个Person\n", len(globalPersonSlice)) }