46 lines
1.1 KiB
Go
46 lines
1.1 KiB
Go
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))
|
|
}
|