V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
simenet
V2EX  ›  Go 编程语言

这个题有迷惑性

  •  
  •   simenet · 2020-10-12 17:46:24 +08:00 · 1862 次点击
    这是一个创建于 1503 天前的主题,其中的信息可能已经有所发展或是发生改变。

    func f1() (r int) {

    defer func () {
        r++
    }()
    return 10
    

    }

    fmt.print(f1())

    输出居然不是 10 ??????????

    6 条回复    2020-10-14 13:47:32 +08:00
    BingoXuan
        1
    BingoXuan  
       2020-10-12 17:55:33 +08:00
    应该是编译器优化吧,定义返回值 r,r 的值为 10,defer 执行函数使 r 自增,返回 r,结果是 11 。
    gollwang
        2
    gollwang  
       2020-10-12 17:57:32 +08:00
    你 return 10 不就相当于:
    r=10
    return r
    nomansky
        3
    nomansky  
       2020-10-12 17:58:40 +08:00
    golang 基础题了
    Dganzh
        4
    Dganzh  
       2020-10-12 18:00:10 +08:00
    这里 return 过程是
    赋值 r=10 ;
    执行 defer,r=11 ;
    返回 r=11 ;
    qq316107934
        5
    qq316107934  
       2020-10-12 18:02:20 +08:00   ❤️ 2
    基础题了,区别于:

    func f1() (int) {
    r:=10
    defer func () {
    r++
    }()
    return r
    }
    reus
        6
    reus  
       2020-10-14 13:47:32 +08:00
    是你自己没学好,官方博客都有一模一样的例子: https://blog.golang.org/defer-panic-and-recover
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1944 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 00:25 · PVG 08:25 · LAX 16:25 · JFK 19:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.