Go面试题44

Posted by     "" on Wednesday, January 8, 2020

Go面试题44

1: 下面代码有什么问题?

func main()  {
    m := make(map[string]int, 2)
    cap(m)

2: 下面的代码有什么问题?

func main() {
    var x = nil
    _ = x
}

3: 下面代码能编译通过吗?

type info struct {
    result int
}
func work() (interror) {
    return 13, nil
}

func main() {
    var data info
    data.result, err = work()
    fmt.Printf("info: %+v\n", data)
}

参考答案及解析

1: 答案及解析: 使用cap()获取map的容量.

使用make创建map变量时可以指定第二个参数,不过会被忽略。 cap()函数适用于数组,数组指针,slicechannel,不适用于map,可以使用len()返回map的元素个数.

2: 答案及解析: 问题: nil用于表示interface, 函数, maps, sliceschannels零值.如果不指定变量的类型,编译器猜不出变量的具体类型,导致编译错误.

修复代码:

func main() {
    var x interface{} = nil
    _ = x
}

3: 答案及解析: 编译失败: non-name data.result on left side of :=.

不能使用短变量声明设置结构体字段值,修复代码:

func main() {
    var data info

    var err error
    data.result, err = work()
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(data)
}

「真诚赞赏,手留余香」

Richie Time

真诚赞赏,手留余香

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