相比其它语言,golang 有哪些优势?
- 并发友好,语言层面支持协程。
- 部署简单,可以编译成可执行文件,不需要执行器。
- 语法简洁,便于学习,代码量少。
- 内存管理高效,有垃圾回收,支持指针。
golang 中 make 和 new 的区别?
- make 返回引用,new 返回指针
- 变量类型不同:new 用于 string、int 和数组等,make 用于切片、map、channel(make只能用于切片,map,channel三种类型)。
- new之后会分配一段清零的内存,make返回的内存存储着相应的结构信息,也就是说make需要分配内存+初始化内存两部分.
数组和切片的区别?
- 数组是定长,访问和复制不能超过数组定义的长度。切片的长度和容量可以自动扩容。
- 数组是值类型,切片是引用类型,切片一旦扩容,指向一个新的底层数组,内存地址随之改变。
数组的定义
var a1 [3]int
var a2 [...]int{1,2,3}
切片的定义
var a1 []int
var a2 :=make([]int,3,5)
数组的初始化
a1 := [...]int{1,2,3}
a2 := [5]int{1,2,3}
切片的初始化
b:= make([]int,3,5)
逃逸分析说下?为什么要逃逸分析?如何避免逃逸
go map 底层 扩容机制
对已经关闭的的 chan 进行读写,会怎么样?为什么?