首页 > 其他分享 >Go 面试每天一篇(第 21 天)

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

时间:2022-11-10 12:33:03浏览次数:35  
标签:defer 21 person 28 29 Person 面试 func Go

你好哇,今天是节前最后一天,提前祝大家中秋愉快,假期玩的开心!还有一件事告诉大家,《每天一篇》在放假期间会停更三天!平日里我们必须努力上班、学习成长,放了假就好好休息放松、调整好状态,节后我们再继续奋斗!

来看下

1.参考答案及解析:C。被调用函数里的 defer 语句在返回之前就会被执行,所以输出顺序是 F D M。

2.参考答案及解析:29 28 28。这道题在第 19 天题目的基础上做了一点点小改动,前一题最后一行代码 ​​person.age = 29​​​ 是修改引用对象的成员 age,这题最后一行代码 ​​person = &Person{29}​​ 是修改引用对象本身,来看看有什么区别。

1处.person.age 这一行代码跟之前含义是一样的,此时是将 28 当做 defer 函数的参数,会把 28 缓存在栈中,等到最后执行该 defer 语句的时候取出,即输出 28;

2处.defer 缓存的是结构体 Person{28} 的地址,这个地址指向的结构体没有被改变,最后 defer 语句后面的函数执行的时候取出仍是 28;

3处.闭包引用,person 的值已经被改变,指向结构体 ​​Person{29}​​,所以输出 29.

由于 defer 的执行顺序为先进后出,即 3 2 1,所以输出 29 28 28。

欢迎在留言区补充!

看下今天的题目:

A. var a []int
B. a := []int{}
type S struct {
}

func f(x interface{}) {
}

func g(x *interface{}) {
}

func main() {
s := S{}
p := &s
f(s) //A
g(s) //B
f(p) //C
g(p) //D
}

3.下面 A、B 两处应该填入什么代码,才能确保顺利打印出结果?



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



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




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



Go 面试每天一篇(第 21 天)_先进后出



标签:defer,21,person,28,29,Person,面试,func,Go
From: https://blog.51cto.com/u_15289640/5840495

相关文章