Golang面试题收集
答: 不会
for range在循环前已经获取了可迭代变量的可迭代次数了
不会死循环,for range是golang的语法糖,在循环开始前会获取切片长度,然后再执行切片长度次数的循环
如果for 循环select时候,通道关闭了,那么每次都会执行这个case
如果select中的case只有一个,在通道关闭以后,会进入死循环,
因为channel关闭后读取channel返回的是零值
Go语言map不初始化使用会怎么样?
未初始化的map是nil,此时对其进行插入或者更新操作程序会引发运行时错误,panic: assignment to entry in nil map
如果仅进行读取操作,则会返回零值,进行删除操作也不会报错
package main
import "fmt"
func main() {
var a map[string]int
fmt.Println(a["k"])
delete(a, "k")
}
那么为什么读取和删除未初始化的map不会报错呢?
Go语言中为了简化代码,并避免频繁的空指针检查,选择在访问nil map的时候返回零值,这个零值是map锁存储类型的默认零值。
delete操作在go中有特定的容错处理,它会检查map是否为nil,如果是nil,它什么也不做;如果是一个有效的map,它会删除指定的键值对。