如何理解两个for的输出问题

__Golang__ · · 1003 次点击
因为for循环中的user是同一个临时变量且m1的receiver是指针 也即是循环到A时,user中存的是A的地址 循环到B时,user中存的是B的地址 循环到C时,user中存的是C的地址 最后才逆序执行,此时3个方法的receiver都已经是C了 试着把user.m1()改成 tmpUser := user tmpUser.m2() 输出就正常了
#10
更多评论
m1,m2都共用一个环境user(类似于闭包),defer注册后是从函数结束处开始调用的,所以第二个defer处输出ABC,第一个defer处输出CCC,我怀疑是range指针已经在user末尾,所以打印了三个CCC————新手入坑,纯属个人间接,有误希望大牛指出
#1
思来想去还是没吃透其中的原理,还是希望有大牛来仔细讲解一下
#2