標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

defer による戻り値の差し替え

(先日、gist に書いたものをこちらへ移動)

package main

func sub() (rc int) {
    defer func() {
        println("defer func():", rc)
        rc *= 2
    }()

    rc = 1
    return 2
}

func main() {
    rc := sub()
    println("main:", rc)
}
$ go run defer.go
defer func(): 2
main: 4

まとめ

  • defer は戻り値の値を、戻り値に割り当てられた変数(例では rc)から得て、差し替えることができる
  • return 2rc = 2 ; return と等価