首先说明在循环中使用 defer 是一个不好的习惯
在逛社区的时候碰到了这个问题
package main
import "fmt"
type Test struct {
name string..., 这样子使用defer会声明一个外部变量, 循环中不断赋值, 导致用了最后一个, 但我看了一下代码, 感觉不对....Test{{"a"}, {"b"}, {"c"}}
for _, t := range ts {
defer t.Close()
}
}
// output 正常, 我加了一个指针打印...那么会去寻址, 而你在循环中调用
第一次: 那么这个变量开始地址是: 0xc000044240, 这时候指针调用的方法Close也是记住了这个地址, 指针指向结构体的值是a, 第一次循环结束释放局部变量...第二次: 那么这个变量地址还是: 0xc000044240, 这时候指针调用的方法Close也是记住了这个地址, 指针指向结构体的值是b, 第二次循环结束释放局部变量
第三次: 那么这个变量地址还是: