defer 和 println 参考问题?
Defer and println reference issues?
我想知道为什么是0而不是1?
那是一个指针,不是 value.thanks 伙计们。
package main
import "fmt"
func main() {
var i = new(int)
defer func(i *int) {
fmt.Printf("3:%p,%v\n", i, *i)
}(i)
defer fmt.Printf("2:%p,%v\n", i, *i)
*i++
fmt.Printf("1:%p,%v\n", i, *i)
}
//1:0x1400001c0a0,1
//2:0x1400001c0a0,0
//3:0x1400001c0a0,1
希望this simple and clear example有助于理解文档中的内容。
import "fmt"
func params() int {
fmt.Println("params")
return 0
}
func f(int) {
fmt.Println("deferred")
}
func main() {
defer f(params())
fmt.Println("exit")
}
结果
params
exit
deferred
立即评估延迟调用的参数,但直到周围函数 returns.
才执行函数调用
在第一个 defer 中,您使用调用 func 时收到的参数 i。
在第二个 defer fmt.Printf("2:%p,%v\n", i, *i) 中,I 的值在 *i++
之前就已经求值了
我想知道为什么是0而不是1?
那是一个指针,不是 value.thanks 伙计们。
package main
import "fmt"
func main() {
var i = new(int)
defer func(i *int) {
fmt.Printf("3:%p,%v\n", i, *i)
}(i)
defer fmt.Printf("2:%p,%v\n", i, *i)
*i++
fmt.Printf("1:%p,%v\n", i, *i)
}
//1:0x1400001c0a0,1
//2:0x1400001c0a0,0
//3:0x1400001c0a0,1
希望this simple and clear example有助于理解文档中的内容。
import "fmt"
func params() int {
fmt.Println("params")
return 0
}
func f(int) {
fmt.Println("deferred")
}
func main() {
defer f(params())
fmt.Println("exit")
}
结果
params
exit
deferred
立即评估延迟调用的参数,但直到周围函数 returns.
才执行函数调用在第一个 defer 中,您使用调用 func 时收到的参数 i。 在第二个 defer fmt.Printf("2:%p,%v\n", i, *i) 中,I 的值在 *i++
之前就已经求值了