Go语言defer中的函数参数问题

传进defer关键字修饰的函数的参数都会被复制,与原来的变量没有关系。如果是指针的话还是可以操纵指针对应的变量值。可以通过如下代码比较:

func test1() {
	x, y := 10, 20
	defer func(i *int) {
		fmt.Println("defer:", *i, y) // y 闭包引⽤用

	}(&x) // x 被复制
	x += 10
	y += 100
	fmt.Println("x =", x, "y =", y)
}

输出
x = 20 y = 120
defer: 20 120
func test2() {
	x, y := 10, 20
	defer func(i int) {
		fmt.Println("defer:", i, y) // y 闭包引⽤用

	}(x) // x 被复制
	x += 10
	y += 100
	fmt.Println("x =", x, "y =", y)
}

输出
x = 20 y = 120
defer: 10 120

——Snake

 

 

 

snake

作者: snake

我们需要为这个社会做一点贡献,失去了才懂得去珍惜。

发表评论

电子邮件地址不会被公开。 必填项已用*标注