Go面试题37
1: 关于channel
的特性, 下面说法正确的是?
- A. 给一个
nil channel
发送数据,造成永远阻塞. - B. 从一个
nil channel
接受数据, 造成永远阻塞. - C. 给一个已经关闭的
channel
发送数据,引起panic
. - D. 从一个已经关闭的
channel
接受数据,如果缓冲区中为空,则返回一个零值.
2: 下面代码有什么问题?
const i = 100
var j = 123
func main() {
fmt.Println(&j, j)
fmt.Println(&i,i )
}
3: 下面代码能否编译通过? 如果通过, 输出什么?
func GetValue(m map[int]string, id int) (string, bool) {
if _, exist := m[id]; exist {
return "exist", true
}
return nil, false
}
func main() {
intmap := map[int]string {
1:"a",
2: "b",
3: "c",
}
v, err := GetValue(intmap, 3)
fmt.Println(v, err)
}
参考答案及解析
1: 答案及解析: ABCD
2: 答案及解析: cannot take the address of i
. 知识点: 常量. 常量不同于变量的在运行期分配内存, 常量通常是被编译器在预处理阶段直接展开,作为指令数据使用,所以常量无法寻址.
3: 答案及解析: 编译不能通过编译. 知识点: 函数返回值类型. nil
可以用作interface, function, pointer, map, slice 和channel
的空值.但是如果不特别指定的话,Go语言不能识别类型, 所以会报错: cannot use nil as type string in return argument
.
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付