几个 golang 面试题及解析

一、以下代码的输出内容为

答案

解析

考查 defer 和 panic 组合的情况,在有 panic 时,会先执行 defer 然后再把恐慌传递出去。

更多相关内容可查看 defer 常见的坑以及官方文档描述

二、以下代码有什么问题

答案

解析

for 循环使用 stu 遍历时,stu 只是一个临时变量,遍历过程中指针地址不变,所以后面的赋值都是指向了同一个内存区域,导致最后所有的信息都一致。

其实这个现象不仅仅存在于 go 中,c/c++python 中也存在,原理也都一样。

修改方案

三、下面的代码会输出什么,并说明原因

答案

解析

第一个循环中的打印是在函数中打印的,i 是外部的变量,执行 go func(){}后代码不会立即执行,一般当该代码片段被调度器执行的时候,for 循环已经全部执行完毕,此时的 i 为 10 。所以 i 会打印 10 个 10,而 j 则会无序打印 1-10 。

四、下面代码会输出什么

答案

解析

go 中没有继承,只有组合。 Teacher 中的 People 是一个匿名对象,通过它调用的函数都是自身的。

发表评论