golang面试题分析01_defer和函数返回值
发布时间:2021-05-21 编辑:jiaochengji.com
教程集为您提供golang面试题分析01,defer和函数返回值等资源,欢迎您收藏本站,我们将为您提供最新的golang面试题分析01,defer和函数返回值资源
问题:以下代码是否可以编译通过?如果通过,输出什么?
package main
func main() {
println(DeferFunc1(1))
println(DeferFunc2(1))
println(DeferFunc3(1))
}
func DeferFunc1(i int) (t int) {
t = i
defer func() {
t = 3
}()
return t
}
func DeferFunc2(i int) int {
t := i
defer func() {
t = 3
}()
return t
}
func DeferFunc3(i int) (t int) {
defer func() {
t = i
}()
return 2
}
知识点:
- defer在函数结束前执行(在return前被执行)
- 函数返回值名字 会在函数起始处 被初始化为 对应类型的初始值 并作用于整个函数
具体分析
- DeferFunc1中有函数返回值t作用域为整个函数,在return之前defer会被执行,t会被修改,t = 1 3 返回4
- DeferFunc2中匿名函数func() 中的t作用域为func()函数,初始值为0。在return之前defer会被执行,t值被修改为1
- DeferFunc3中 t作用域为整个函数,最后的return 2 中的2 即为要返回的t的值,return之前,defer会被执行,t值被修改,t=2 i 为3
Output:
4
1
3
到此这篇关于“golang面试题分析01_defer和函数返回值”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!
您可能感兴趣的文章:
golang面试题分析01_defer和函数返回值
Golang面试题总结
golang面试题第十一天
go语言杂谈-----函数返回局部变量问题(“逃逸分析”)
golang中函数,方法和接口的浅析(函数篇)
Go 语言函数
golang 没有名字参数_说说不知道的Golang中参数传递
golang byte转string_golang面试题:怎么避免内存逃逸?
golang 数组面试题
详解defer实现机制(附上三道面试题)
上一篇:golang读写锁实现与核心原理分析
下一篇:Go语言学习3----Go语言特色
[关闭]