Golang面试题收集

image-20250129164814067

答: 不会

for range在循环前已经获取了可迭代变量的可迭代次数了

不会死循环,for range是golang的语法糖,在循环开始前会获取切片长度,然后再执行切片长度次数的循环

image-20250129165121318

如果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")
}

image-20250130180438319

那么为什么读取和删除未初始化的map不会报错呢?

Go语言中为了简化代码,并避免频繁的空指针检查,选择在访问nil map的时候返回零值,这个零值是map锁存储类型的默认零值。

delete操作在go中有特定的容错处理,它会检查map是否为nil,如果是nil,它什么也不做;如果是一个有效的map,它会删除指定的键值对。