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