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
.
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付