Go基础面试题, Go 语言中,使用值为 nil 的 slice 和 map 会发生什么?
Go基础面试题, Go 语言中,使用值为 nil 的 slice 和 map 会发生什么?
QA
Step 1
Q:: Go 语言中,使用值为 nil 的 slice 会发生什么?
A:: 在 Go 语言中,slice 是一个三元组,包含指向底层数组的指针、长度和容量。当 slice 为 nil 时,其指针为 nil,长度和容量均为 0。nil slice 的行为与长度为 0
的 slice 类似,可以对其进行迭代、追加元素等操作,不会导致运行时错误。通过使用内置函数 len 和 cap 也可以安全地获取 nil slice 的长度和容量。
Step 2
Q:: Go 语言中,使用值为 nil 的 map 会发生什么?
A:: 在 Go 语言中,map 是一种哈希表。当 map 为 nil 时,其底层没有分配任何存储空间,尝试对 nil map 进行读取操作不会引发 panic,但尝试向 nil map 写入数据则会引发 panic。使用 map 之前应确保其已被初始化(通过 make 函数或赋值操作),以避免潜在的运行时错误。
Step 3
Q:: 如何初始化 slice 和 map?
A:: slice 可以通过声明、赋值、使用内置的 make 函数来初始化。例如:var s []int, s = make([]int, 0),map 可以通过声明、赋值、使用内置的 make 函数来初始化。例如:var m map[string]int, m = make(map[string]int)
。
Step 4
Q:: 在 Go 语言中,如何判断一个 slice 或 map 是否为 nil?
A:: 判断一个 slice 或 map 是否为 nil,可以直接使用 if 语句配合 == nil 进行判断。例如:if s == nil { ... } 或 if m == nil { ... }
。
Step 5
Q:: Go 语言中,使用值为 nil 的 channel 会发生什么?
A:: 在 Go 语言中,channel 为 nil 时,任何对其进行的发送、接收操作都会永久阻塞。这种情况在多协程编程中尤其需要注意,以避免死锁。