教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 golang面试题分析01_defer和函数返回值

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
}

知识点:

  1. defer在函数结束前执行(在return前被执行)
  2. 函数返回值名字 会在函数起始处 被初始化为 对应类型的初始值 并作用于整个函数

具体分析

  • 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实现机制(附上三道面试题)

[关闭]
~ ~