defer + 函数语句 是如何运行的?

package main

import (
    "io"
    "log"
)

func func1(s string) (n int, err error) {
    defer func() {
        log.Printf("func1(%q) = %d, %v", s, n, err)
    }()
    return 7, io.EOF
}

func main() {
    func1("Go")
}

输出: Output: 2011/10/04 10:46:11 func1("Go") = 7, EOF

defer 不是应该在return之前调用么,这里怎么进行传参的?

阅读 2.1k
2 个回答
新手上路,请多包涵

相当于:

package main

import (

"io"
"log"

)

func func1(s string) (n int, err error) {

n = 7
err = io.EOF

func() {
    log.Printf("func1(%q) = %d, %v", s, n, err)
}()

return

}

func main() {

func1("Go")

}

新手上路,请多包涵

return不是一条原子指令,它可以拆分成以下三步.

  1. 给返回值赋值
  2. 执行defer后的函数
  3. return 空
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题