首页 > 其他分享 >go的闭包捕获变量

go的闭包捕获变量

时间:2023-03-03 23:44:21浏览次数:34  
标签:闭包 defer return 捕获 ret Println func go fmt

package main
import (
	"fmt"
)

func A() int {
	var i int
	defer func() {
		i++
		fmt.Println("defer func A",i)
	}()
	fmt.Println("func A",i)
	return i
}

func B()(r int) {
	defer func() {
		r++
		fmt.Println("defer func B",r)
	}()
	fmt.Println("func B",r)
	return r
}

func main() {
	fmt.Println("A()>>",A())
	fmt.Println("B()>>",B())
}


/*
代码中A中return可以分解成: ret = i  i++ return ret
代码中B中return可以分解为 ret = r (*r)++ return ret
这里涉及到闭包捕获变量 在defer中r是对外边r的引用,
所以defer延迟函数中对r的修改就会在ret中体现出来
*/

输出:

func A 0
defer func A 1
A()>> 0
func B 0
defer func B 1
B()>> 1

标签:闭包,defer,return,捕获,ret,Println,func,go,fmt
From: https://www.cnblogs.com/heris/p/17177372.html

相关文章

  • Study for Go ! Chapter two - Expression
    StudyforGo!Chaptertwo-Expression1.Keyword   Golang仅有25个保留关键字,体现了golang语法规则的简洁性保留关键字不能用作常量、变量、函数名......
  • go day200
    结构体变量的赋值点击查看代码packagemainimport"fmt"typeStustruct{ Namestring Ageint}funcmain(){ //方式一:在创建结构体变量时,直接指定字段......
  • MongoDB写入数据策略
    上篇文章介绍了Mongo读取数据的策略(MongoDB读数据策略),主要是readconcern、readpreference两参数,其中readconcern作用于服务端,决定了什么时候能读取到数据;readpreference在客......
  • Wire:Go最优雅的依赖注入工具
    阅读用时:4分钟导语“成熟的工具,要学会自己写代码”。本文介绍了Go依赖注入工具[[Wire]]及其使用方法,以及在实践中积累的各种运用技巧。当代码达到一定规模后,[[Wire]......
  • 敏捷工具leangoo领歌时间线视图上线啦
    https://www.leangoo.com/17735.htmlLeangoo企业版新增「时间线视图」,通过「时间线视图」你可以在项目管理中非常直观的了解每个人的工作分配及各个任务的排期,方便及时......
  • [Go语言tips04]二维数组与二维切片
    0.引言既然在Go语言中数组和切片同时存在并且是两个不同的类型,那当他们是二维时又会产生什么样的问题?因为数组和切片同时存在,在Go语言中二维的使用就会显得和别的语言很......
  • 重要内置函数、常见内置函数(了解)、可迭代对象、迭代器对象、for循环原理、异常捕获
    目录一、重要内置函数二、常见内置函数(了解)三、可迭代对象四、迭代器对象五、for循环内部原理六、捕捉异常一、重要内置函数1.zip说白了就是压缩几组数据值,说细了......
  • Go组件库总结之协程睡眠唤醒
    本篇文章我们用Go封装一个利用gopark和goready实现协程睡眠唤醒的库。文章参考自:https://github.com/brewlin/net-protocol1.gopark和goready的声明//go:linknamegopark......
  • 代理异常捕获
    背景在某些场景,比如过滤器,拦截器,或者某些代理类的时候,ControllerAdvance是捕获不到异常的方案:使用springmvc框架,让程序直接导入进来//验证etbc登录try{......
  • protobuf golang&&python序列化反序列化测试
    1.概要最近考虑采用protobuf来实现kafka消息传递,所以先测试一下golang和python之前序列化互通问题。由于go和python对于二进制的表示在ide层面是无法统一的,直接把python......