- 面试题
- 第一天
- 第二天
- 第三天
- 第四天
- 第五天
- 第六天
- 第七天
- 第八天
- 第九天
- 第十天
- 第十一天
- 第十二天
- 第十三天
- 第十四天
- 第十五天
- 第十六天
- 第十七天
- 第十八天
- 第十九天
- 第二十天
- 第二十一天
- 第二十二天
- 第二十三天
- 第二十四天
- 第二十五天
- 第二十六天
- 第二十七天
- 第二十八天
- 第二十九天
- 第三十天
- 第三十一天
- 第三十二天
- 第三十三天
- 第三十四天
- 第三十五天
- 第三十六天
- 第三十七天
- 第三十八天
- 第三十九天
- 第四十天
- 第四十一天
- 第四十二天
- 第四十三天
- 第四十四天
- 第四十五天
- 第四十六天
- 第四十七天
- 第四十八天
- 第四十九天
- 第五十天
- 第五十一天
- 第五十二天
- 第五十三天
- 第五十四天
- 第五十五天
- 第五十六天
- 第五十七天
- 第五十八天
- 第五十九天
- 第六十天
- 第六十一天
- 第六十二天
- 第六十三天
- 第六十四天
- 第六十五天
- 第六十六天
- 第六十七天
- 第六十八天
- 第六十九天
- 第七十天
- 第七十一天
- 第七十二天
- 第七十三天
- 第七十四天
- 第七十五天
- 第七十六天
- 第七十七天
- 第七十八天
- 第七十九天
- 第八十天
- 第八十一天
- 第八十二天
- 第八十三天
- 第八十四天
- 第八十五天
- 第八十六天
- 第八十七天
- 第八十八天
- 第八十九天
- 第九十天
- 第九十一天
- 第九十二天
- 第九十三天
- 第九十四天
- 第九十五天
- 第九十六天
- 第九十七天
- 第九十八天
- 第九十九天
- 第一百天
- 第一百零一天
- 第一百零二天
- 第一百零三天
- 第一百零四天
- 第一百零五天
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
第十九天
1.下面代码段输出什么?
type Person struct {
age int
}
func main() {
person := &Person{28}
// 1.
defer fmt.Println(person.age)
// 2.
defer func(p *Person) {
fmt.Println(p.age)
}(person)
// 3.
defer func() {
fmt.Println(person.age)
}()
person.age = 29
}
参考答案及解析:29 29 28。变量 person 是一个指针变量 。
1.person.age 此时是将 28 当做 defer 函数的参数,会把 28 缓存在栈中,等到最后执行该 defer 语句的时候取出,即输出 28;
2.defer 缓存的是结构体 Person{28} 的地址,最终 Person{28} 的 age 被重新赋值为 29,所以 defer 语句最后执行的时候,依靠缓存的地址取出的 age 便是 29,即输出 29;
3.闭包引用,输出 29;
又由于 defer 的执行顺序为先进后出,即 3 2 1,所以输出 29 29 28。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论