美文网首页
golang 中的 defer

golang 中的 defer

作者: 个00个 | 来源:发表于2019-04-09 16:39 被阅读0次

defer 是在return 之前执行的
但是return xxx 并不是一条原始指令

package main

import (
    "fmt"
)

// my : 1
// res : 1
func f1() (result int) {
    defer func() {
        result++
    }()
    return 0
}

// my : 10
// res : 5 -- 我误判的原因, t为局部变量了. defer 影响的是局部变量 t.
//         -- r在return的时候已经拷贝赋值了.
func f2() (r int) {
    t := 5
    defer func() {
        t = t + 5
    }()
    return t
}

// my : 1
func f3() (r int) {
    defer func(r int) {
        r = r + 5
    }(r)
    return 1
}

func main(){
    // return xxx这一条语句并不是一条原子指令!
    // 先给返回值赋值,然后调用defer表达式,最后才是返回到调用函数中。
    a := f1()
    b := f2()
    c := f3()
    fmt.Println(a)
    fmt.Println(b)
    fmt.Println(c)
}

相关文章

  • Golang之Defer

    引用 golang defer实现原理 Golang之轻松化解defer的温柔陷阱 Golang中defer、re...

  • 2017-12-04

    Golang,Panic,Defer,Recover 在golang中,recover在defer里发挥作用。 一...

  • 12 Golang defer panic recover

    defer Golang中的defer会将其后面跟随的语句进行延迟处理。在defer归属的函数即将返回时,将延迟处...

  • go defer理解

    golang的defer是怎么工作的?defer在golang里是一个很基础的关键字,在函数内部使用defer声明...

  • golang 中的 defer

    defer 是在return 之前执行的但是return xxx 并不是一条原始指令

  • GO中defer关键字

    defer关键字在go中用于return之前执行,在golang官方文档中有说明。defer的用法类似java中的...

  • golang中defer执行时机与常见问题

    defer是什么? defer的用途 defer的执行时机 了解defer的执行时机首先要知道golang的ret...

  • Golang中defer用法

    Go语言中的defer语句会将其后面跟随的语句进行延迟处理。在defer归属的函数即将返回时,将延迟处理的语句按d...

  • golang记录

    获取本地IP 限制golang最大并发数 golang最快响应伪代码如下 反射修改对象属性 关于defer中坑的最...

  • 聊聊golang的defer

    序 本文主要研究一下golang的defer defer return先赋值(对于命名返回值),然后执行defer...

网友评论

      本文标题:golang 中的 defer

      本文链接:https://www.haomeiwen.com/subject/zmliiqtx.html