以下go语言代码输出什么?A:10 10;B:10 19;C:19 10;D:19 19。
package main
import (
"fmt"
)
func hello(i *int) int {
defer func() {
*i = 19
}()
return *i
}
func main() {
i := 10
j := hello(&i)
fmt.Println(i, j)
}
答案选C。假设返回值变量是returnVal,return *i在defer函数之前执行等价于returnVal=*i,这时returnVal=10;然后执行defer,这时i=19;最后返回,hello函数执行完毕。有defer的情况下可总结为有3个步骤,那就是赋值,defer,返回。