相比其它语言,golang 有哪些优势?

  • 并发友好,语言层面支持协程。
  • 部署简单,可以编译成可执行文件,不需要执行器。
  • 语法简洁,便于学习,代码量少。
  • 内存管理高效,有垃圾回收,支持指针。

golang 中 make 和 new 的区别?

  1. make 返回引用,new 返回指针
  2. 变量类型不同:new 用于 string、int 和数组等,make 用于切片、map、channel(make只能用于切片,map,channel三种类型)。
  3. new之后会分配一段清零的内存,make返回的内存存储着相应的结构信息,也就是说make需要分配内存+初始化内存两部分.

数组和切片的区别?

  1. 数组是定长,访问和复制不能超过数组定义的长度。切片的长度和容量可以自动扩容。
  2. 数组是值类型,切片是引用类型,切片一旦扩容,指向一个新的底层数组,内存地址随之改变。

数组的定义

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 进行读写,会怎么样?为什么?