Go逃逸现象
环境:go version go1.18.10 darwin/arm64
[]interface赋值
package main
func main() {
data := []interface{}{200, 100}
data[0] = 100
}
main.go:3:6: can inline main
main.go:4:23: []interface {}{...} does not escape
main.go:4:24: 200 does not escape
main.go:4:29: 100 does not escape
main.go:5:2: 100 escapes to heap
map[string]interface{}
package main
func main() {
data := make(map[string]interface{})
data["key"] = 100
}
main.go:3:6: can inline main
main.go:4:14: make(map[string]interface {}) does not escape
main.go:5:2: 100 escapes to heap
map[interface]interface{}
package main
func main() {
data := make(map[interface{}]interface{})
data["key"] = 100
}
main.go:3:6: can inline main
main.go:4:14: make(map[interface {}]interface {}) does not escape
main.go:5:2: "key" escapes to heap
main.go:5:2: 100 escapes to heap
map[string] []string
package main
func main() {
data := make(map[string][]string)
data["key"] = []string{"value"}
}
main.go:3:6: can inline main
main.go:4:14: make(map[string][]string) does not escape
main.go:5:24: []string{...} escapes to heap
[]*int{nil}
package main
func main() {
a := 10
data := []*int{nil}
data[0] = &a
}
main.go:3:6: can inline main
main.go:4:2: moved to heap: a
main.go:5:16: []*int{...} does not escape