Go逃逸现象--避开这几种用法

49 阅读1分钟

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

Func(*int) ...

Funn([]string)进行[]string{"value"}

Chan[]string 传入 []string{"value"}