第一个for输出三个C,是defer执行时user的地址指向{"C"} ,那第二个for的输出如何理解(defer执行时user不一致?)
```
type User struct {
name string
}
func (user *User) m1() {
fmt.Println(user.name)
}
func (user User) m2() {
fmt.Println(user.name)
}
func TestClosePackage(t *testing.T) {
users := []User{{"A"}, {"B"}, {"C"}}
for _, user := range users {
defer user.m1()
}
//C
//C
//C
for _, user := range users {
defer user.m2()
}
//C
//B
//A
}
```
func TimeConst() {
i := 123
var now *int = &i
fmt.Println("1", now)
defer func(t *int) {
fmt.Println("2", t)
}(now)
ii := 456
now = &ii
fmt.Println("3", now)
}
func main() {
TimeConst()
}
看now的地址值
#7
更多评论
m1,m2都共用一个环境user(类似于闭包),defer注册后是从函数结束处开始调用的,所以第二个defer处输出ABC,第一个defer处输出CCC,我怀疑是range指针已经在user末尾,所以打印了三个CCC————新手入坑,纯属个人间接,有误希望大牛指出
#1