go的内存逃逸?
go语言在编辑阶段通过逃逸分析把分配在栈上变量 分配到堆上去。
栈内存: 一段连续的内存,便于高效运行指令过程中的临时变量存储。
堆内存: 主要由垃圾回收器 回收没有被引用的指针。
逃逸分析:栈内容效率更高,指针作为函数的返回值时,一定会发生逃逸,逃逸到堆内存的变量不会被马上回收,只能通过GC 标记清除,因此尽量避免内存逃逸。
逃逸分析可以判断一个变量是分配在栈内存 还是堆内存。
go build -gcflags="-m -l" demo.go
-m 打印出逃逸分析信息
-l 禁止内联 更好的观察逃逸
go 语言中 = 与 := 的区别?
=是赋值语句, 在声明的时候赋值
:= 是声明类型并赋值,自动匹配变量类型 可以不用声明
= 要和var 关键字一起使用, var可以在函数中使用 也可以在函数外使用
:= 只能在函数中使用,只能定义局部变量
用var 定义 赋值以后 还可以改变, 用 := 定义的变量不能改变。