关于 defer 的案例有点不太理解(新手) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
Asakijz
V2EX    Go 编程语言

关于 defer 的案例有点不太理解(新手)

  •  1
     
  •   Asakijz 2022-07-23 09:10:07 +08:00 2525 次点击
    这是一个创建于 1178 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在看 defer 案例的时候看到这题有点不太理解,为什么后两句会输出 nil ? 是因为这个 err 只能使用一次嘛?

    jOXc3n.png

    11 条回复    2022-07-25 13:14:57 +08:00
    learningman
        1
    learningman  
       2022-07-23 09:22:12 +08:00
    前面两个在 defer 注册的时候,err 的值已经固定了,第一个不用说了,第二个也捕获了当时为 nil 的 err ,只有最后一个能拿到 return 时的外层的 err 。
    闭包那块的东西。
    Asakijz
        2
    Asakijz  
    OP
       2022-07-23 09:24:51 +08:00
    @learningman 那是不是可以这么理解,就是在使用 defer 的时候,里面就已经确定了对应类型的零值了。而因为第三条语句是闭包所以能逐层向外寻找 err 值
    learningman
        3
    learningman  
       2022-07-23 09:25:52 +08:00   1
    @Asakijz #2 不是存了 0 值,是存了注册时变量对应的值
    Asakijz
        4
    Asakijz  
    OP
       2022-07-23 09:32:37 +08:00
    @learningman 感谢,现在理解了
    keepeye
        5
    keepeye  
       2022-07-23 10:09:11 +08:00   1
    前两句,值已经确定了
    wd
        6
    wd  
       2022-07-23 11:06:00 +08:00 via iPhone   1
    学习下闭包吧 这概念各种语言里面都有。以前我记得面试 js 的时候必问闭包..
    Asakijz
        7
    Asakijz  
    OP
       2022-07-23 11:23:32 +08:00
    @wd 完全没有编程基础,都说 Go 挺火的,就下班之后学习下,所以学习的时候有些地方会卡壳。。
    wd
        8
    wd  
       2022-07-23 13:28:49 +08:00 via iPhone   1
    @Asakijz 别着急。你这入门肯定会比较慢,耐下心来,过几年会有效果的。我刚开始学的时候连 i=i+1 都死活看不懂
    lasfresas
        9
    lasfresas  
       2022-07-23 14:15:35 +08:00   1
    感谢,我也顺便巩固了一下
    raynor2011
        10
    raynor2011  
       2022-07-23 17:26:57 +08:00   1
    前面两个 err 是传进去的,最后一个是现取的
    tianyou666shen
        11
    tianyou666shen  
       2022-07-25 13:14:57 +08:00   1
    defer 把一个调用函数压入栈,随后在函数 return 执行时先进后出地执行.
    如果函数的参数存在未确定的值,就会先确定函数参数值,再将整个语句存入 defer 的调用栈.

    在这个题目:
    最后一个使用函数没有参数,所以没用确定一个固定的参数传入.前两行的函数需要函数参数,所以会去寻找一个固定值.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5436 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 01:21 PVG 09:21 LAX 18:21 JFK 21:21
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86