栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

Golang defer 中变量的赋值,return了也给你改了

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Golang defer 中变量的赋值,return了也给你改了

Golang defer 中变量的赋值,return了也给你改了 Golang轻松学习

文章目录
  • Golang defer 中变量的赋值,return了也给你改了
  • 一、defer 是什么?
  • 二、变量的赋值
    • 1.直接声明变量会立刻解析
      • 结果
    • 2.声明方法,但不影响方法内变量
      • 结果
  • 三、变量的赋值顺序
    • 1.后进先出规则
      • 结果
    • 2.声明方法后,变量可变;直接声明变量不可变
      • 结果
  • 四、return 后 修改返回值
    • 1.原方法
      • 结果
    • 2.修改返回值
      • 结果
  • 总结


一、defer 是什么?

在Golang当中,defer代码块会在函数调用链表中增加一个函数调用,会在return之后添加一个函数调用。因此,defer通常用来释放函数内部变量。也可以在代码中优雅的关闭/清理代码中所使用的变量,关闭连接池与错误的捕获。

二、变量的赋值 1.直接声明变量会立刻解析

defer fmt.Println(“fmt a1:”,a)

代码如下(示例):

func main() {

	a := 1
	defer fmt.Println("fmt  a1:",a)
	a++
}

结果

2.声明方法,但不影响方法内变量

defer func() {
fmt.Println(“func a2:”,a)
}()

代码如下(示例):

func main() {

	a := 1
	defer func() {
		fmt.Println("func a2:",a)
	}()
	a++

}


结果

三、变量的赋值顺序 1.后进先出规则

代码如下(示例):

func main() {

	a := 1
	defer fmt.Println("fmt  a1:",a)
	defer func() {
		fmt.Println("func a2:",a)
		a++
	}()
	defer func() {
		fmt.Println("func a3:",a)
		a++
	}()
	a++
}

结果

2.声明方法后,变量可变;直接声明变量不可变

代码如下(示例):

func main() {
	a := 1
	defer fmt.Println("fmt  a1:",a)
	defer func() {
		fmt.Println("func a2:",a)
		a++
	}()
	defer func() {
		fmt.Println("func a3:",a)
		a++
	}()
	a++
}



结果

此时依次声明,
a1 值直接声明变量不可变为1
a2 直接声明方法,a2值随着a值改变
a3 直接声明方法,a3值随着a值改变

方法在 a ++ 后结束,此时a为 2
a3 由于直接声明方法,a3值随着a值改变,此时a值为 2,
再执行a3内 a++,此时a为 3
a2 由于直接声明方法,a2值随着a值改变,此时a值为 3,
再执行a3内 a++,此时a为 4
a1 由于直接声明,a1值不可变,依旧为1

四、return 后 修改返回值 1.原方法

代码如下(示例):

func main() {

	a := 1

	i := ANum(a)

	fmt.Println("i", i)

}

func ANum(a int) (i int) {
	fmt.Println("a", a)
	return a
}

结果

2.修改返回值

代码如下(示例):

func main() {

	a := 1

	i := ANum(a)

	fmt.Println("i", i)

}

func ANum(a int) (i int) {

	defer func() {
		i = 100
	}()

	fmt.Println("a", a)
	return a
}
结果

此时返回值已被修改为 100


总结

通过以上来了解Golang中defer 的使用, 在Go语言中,可以使用关键字defer向函数注册退出调用,即主函数退出时,defer后的函数才被调用。defer语句的作用是不管程序是否出现异常,均在函数退出时自动执行相关代码。
在函数中,经常需要创建资源(比如:数据库连接、文件句柄、锁等) ,通过defer在函数执行完毕后执行,及时的释放资源。

希望这个博客能对你有所益处。我是轻王,我为自己代言。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/909215.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号