Go 面试每天一篇(第 25 天)

点击上方蓝色“Golang来啦”关注我哟

加个“星标”,天天 15 分钟,一起学 Go

先说个事儿,昨天早上公众号发生了"惨烈的事故",导致大家没看到昨天的文章,实在抱歉!相信有围观我朋友圈的朋友已经知道了,看下图。

Go 面试每天一篇(第 25 天)_第1张图片

知道真相的我,去厕所哭晕了都…

说出来,让大家乐呵一下,也警醒下自己!

好了,言归正传,下面是今天的,不对,是昨天的文章。


做题前,沟通一个很多人关心的问题,连续几位同学反映,看前一天题目解析时需要翻看前一天文章看原题,文章来回切换不方便。这个问题,在

为了了解大家的诉求,使用起来更方便,做个统计,具体怎么做,我们以统计结果为准,烦劳大家!

今天做了个尝试,解析时贴了原题,一起来看下昨天题目的解析:

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

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

参考答案及解析:

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

map 的输出是无序的。

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
}

参考答案及解析:

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,因为

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

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

欢迎在留言区补充!

看下今天的题目:

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

func (i int) PrintInt ()  {
    fmt.Println(i)
}

func main() {
    var i int = 1
    i.PrintInt()
}
  • A. 1

  • B. compilation error

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

 
    
  • A. speak

  • B. compilation error

答案以及解析会在下一篇文章中给出,鼓励大家在留言区留下答案,抱团学习,日拱一卒,每天进步一点

ps:看完文章如果有收获,顺手花 1s 时间帮点下文末右下方的「在看」,感激!

所有学习上的成功,都只依靠两件事 -- 策略和坚持,而坚持本身就是最重要的策略!

推荐阅读:

如果我的文章对你有所帮助,点赞、转发都是一种支持!

640?

你可能感兴趣的:(Go 面试每天一篇(第 25 天))