首先说明在循环中使用 defer 是一个不好的习惯
在逛社区的时候碰到了这个问题
package main
import "fmt"
type Test struct {
name string..." closed")
}
func main() {
ts := []Test{{"a"}, {"b"}, {"c"}}
for _, t := range ts {
defer...t.Close()
}
}
输出结果:
c closed
c closed
c closed
可以看到输出了三个c close
当时的高赞回答是, 这样子使用defer会声明一个外部变量...func main() {
// 这里换成指针
ts := []*Test{{"a"}, {"b"}, {"c"}}
for _, t := range ts {
defer...Test{{"a"}, {"b"}, {"c"}}
for _, t := range ts {
fmt.Println(unsafe.Pointer(&t))
defer