22 条回复  ·  2416 次点击
NessajCN 小成 2025-4-1 17:51:26
https://go.dev/blog/defer-panic-and-recover "3. Deferred functions may read and assign to the returning function's named return values." 纯粹就是 named return 特性,死记就好了
sardina 小成 2025-4-1 17:56:02
谁要在开发中这么写代码 小心被打
zhengfan2016 楼主 小成 2025-4-1 18:00:55
@sardina 哈哈,我感觉你可以整理一个 awesome golang 容易挨打的代码片段,让新手村的 xdm 学习 https://i.imgur.com/agAJ0Rd.png
vincentWdp 初学 2025-4-1 18:01:24
``` func foo(n int) (t int) { t = n ``` 换成 ``` func foo(n int) int { t := n ```
ChrisFreeMan 小成 2025-4-1 18:01:45
@lesismal 看到你也不会我就放心了
zhengfan2016 楼主 小成 2025-4-1 18:06:58
@NessajCN 原来如此
sardina 小成 2025-4-1 18:07:30
第一个例子 return 是先把返回值存到临时变量里,然后 defer 再修改也改不到临时变量 第一个例子因为返回值有命名,所以 return 是把返回值存到这个命名里里,然后 defer 就可以修改了 总的来说就是 return 先设置返回值 然后再执行 defer ,然后函数返回 https://www.cnblogs.com/saryli/p/11371912.html 可以看这个
peteretep 初学 2025-4-1 18:09:16
后端仔都不这么写的。不要起步就走犄角旮旯了。没有实际意义的。 这个和 c++考试 i++++ 、 ++i++ 的题目有什么区别吗? defer 只用来释放资源,其他使用正常的程序算法解决。
maxwellz 小成 2025-4-1 18:14:50
@zhengfan2016 #7 貌似和 defer 的特性有关系了,这块太久没看了,忘了
Liv1Dad 初学 2025-4-1 18:24:40
很简单啊,defer 放到 一个栈里面。 defer func() { t+=3}() 这个匿名函数 放入到栈中, 等 function 结束时运行。 第一个 函数返回 t, 函数结束后继续执行了 t+=3 。 第二个 函数返回 t 的值,数据结束后继续执行了 t+=3, 此时的 t 和函数返回结果 没有关系。
返回顶部