Go的defer和方法修饰符的一个小坑

先看代码:

https://play.golang.org/p/GlM23bSW6zf

可见:

1. for 循环变量只有一份 

2. 单行的defer和go都是在当前时刻求值。

    如果方法的修饰符是一个指针,那么求值得到的必报是保存了这个指针的值的,如果指针指向内存发生变化,后续取得的数据也会变。

    如果方法的修饰符是一个对象,那么单行的defer和go在求值时刻,会保存这个对象,无论后续这个对象怎么变,取得数值是不变的。

3. 如果是 go/defer 后面跟一个 func()的形式,那么func()内部代码捕获的外部变量都是指针引用,我之前的Blog已经有详述,这里不再重复。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python小屋

黑客走开系列1:Python使用元组做函数实参让代码更安全!

在Python内置对象中,列表、字典、集合属于可变序列,作为函数实参是不安全的,尤其是调用别人写好的恶意函数或者调用被人恶意修改过的函数时,很容易被修改实参。而...

28970
来自专栏技术博客

Knockout.Js官网学习(数组observable)

  如果你需要探测和响应一个集合对象的变化,你应该用observableArray 。

17240
来自专栏老司机的技术博客

宝宝都能学会的python编程教程8:条件判断与循环

先公布上期编程练习的答案,没错,L是一个指向三个列表的二维元祖。 条件判断 实际的项目中条件判断可以说是使用最多的语法之一了,不管是最简单的判断还是负责的业务逻...

35850
来自专栏ml

hdu 3518 (后缀数组)

  题目描述:   找出一个字符串中至少重复出现两次的字串的个数(重复出现时不能重叠)。   code:      后缀数组处理,对于得到height 进行查找...

35140
来自专栏老司机的技术博客

人人都能学会的python编程教程8:条件判断与循环

实际的项目中条件判断可以说是使用最多的语法之一了,不管是最简单的判断还是负责的业务逻辑和算法,条件判断都如影随形。

1.2K100
来自专栏Java技术栈

Java中的基本数据类型转换(自动、强制、提升)

22230
来自专栏破晓之歌

Typescript入门 原

9650
来自专栏Linux驱动

25.C++- 泛型编程之函数模板(详解)

本章学习: 1)初探函数模板 2)深入理解函数模板 3)多参函数模板 4)重载函数和函数模板 ---- 当我们想写个Swap()交换函数时,通常这样写: voi...

29640
来自专栏小二的折腾日记

面试总结-C++

堆、栈、自由存储区、全局/静态存储区、常量存储区 自由存储区存储malloc申请的内存 (1)从静态存储区域分配 。内存在程序编译的时候就已经分配好,这块内存在...

21810
来自专栏我的博客

NodeJs当中module.exports和exports的区别

Module.exports才是真正的接口,exports只不过是它的一个辅助工具。 最终返回给调用的是Module.exports而不是exports。 所有...

37760

扫码关注云+社区

领取腾讯云代金券