package main
import "fmt"
type Test struct { name string }
func (t *Test) Close() { fmt.Println(t.name, " closed") } func main() { ts := []Test{{"a"}, {"b"}, {"c"}} for _, t := range ts { defer t.Close() } }
示例是: c closed c closed c closed
我的运行结果是: c closed b closed a closed
不知道问题出在哪里了
![]() | 1 ippolito 212 天前 和 go version 相关,你可以降低到 1.21 再试下。 |
![]() | 2 gkirito 212 天前 https://tip.golang.org/doc/go1.22 建议看一下这个版本的 release note |
3 thevita 212 天前 |
4 sunny352787 212 天前 你用的 sdk 版本和示例不一样,golang 的 sdk 中间改过一次 |
5 960930marui OP @ippolito 嗯嗯 我猜测也是这个, 但是不知道再哪里搜哈哈, 下面有 v 友放链接了, 我好好看下 |
6 960930marui OP @gkirito 好的感谢 v 友, 了解啦 |
7 sky3hao9 212 天前 之前遇到过这个坑, 后来用 for v, _ := range some { newV := v; go .... 这种解决的 |
![]() | 8 unclejimao 212 天前 @thevita 沃日,以前还把延迟绑定当做特性去理解的,没想到是 Bug ? |
9 mizuki9 212 天前 go 一直存在的一个 bug ,存在很久导致人们把它当成 feature 了。然后在 1.22 版本,go 说我们把这个 bug 修复了 |
![]() | 10 rekulas 212 天前 也不能完全说是 bug 吧,要真被定义为 bug 他们早就修复了,主要是社区之前觉得这个不是问题,一直拖到最近 2 年声音大了才决定修改,感觉 go 社区核心人员也挺头铁的,反正很多优化用户提了很久也不甩你 |
![]() | 11 qxmqh 212 天前 版本问题。 |