Go面试题24

Posted by     "" on Thursday, December 26, 2019

Go面试题24

1: 下面这段代码输出什么?

func main() {
    m := map[int]string{0:"zero", 1:"one"}
    for k, v := range m {
        fmt.Println(k, v)
    }
}

2: 下面这段代码输出什么?

func main() {
    a := 1
    b := 2
    defer calc("1",a, calc("10",a, b))
    a = 0
    defer calc("2",a, calc("20",a, b))
    b = 1
}

func calc(index string, a, b int) int {
    ret := a + b
    fmt.Println(index, a, b, ret)
    return ret
}

参考答案及解析

1: 答案及解析:

0 zero
1 one
// 或者
1 one
0 zero

map的输出是无序的.

2: 答案及解析:

10 1 2 3
20 0 2 2
2 0 2 2
1 1 3 4

程序执行到main()函数三行代码的的时候,会先执行calc()函数的b参数,即:calc("10",a,b), 输出: 10 1 2 3,得到值3,因为defer定义的函数是延迟函数,故calc("1",1,3)会被先执行;

程序执行到第五行的时候, 同样先执行calc("20", a, b)输出: 20 0 22 得到值2, 同样将calc("2", 0, 2)延迟执行;

程序执行到末尾的时候,按照栈先进后出的方式依次执行: calc("2", 0, 2), calc("1", 1, 3), 则结果依次输出: 2 0 2 2, 1 1 3 4.

「真诚赞赏,手留余香」

Richie Time

真诚赞赏,手留余香

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