(先日、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 2
はrc = 2 ; return
と等価