Go面试题37

Posted by     "" on Friday, January 3, 2020

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.

「真诚赞赏,手留余香」

Richie Time

真诚赞赏,手留余香

使用微信扫描二维码完成支付