V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
960930marui
V2EX  ›  Go 编程语言

为什么我的 defer 运行结果和示例不一样

  •  
  •   960930marui · 12 小时 22 分钟前 · 699 次点击

    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

    不知道问题出在哪里了

    11 条回复    2025-03-12 17:04:08 +08:00
    ippolito
        1
    ippolito  
       12 小时 10 分钟前
    和 go version 相关,你可以降低到 1.21 再试下。
    gkirito
        2
    gkirito  
       12 小时 10 分钟前
    https://tip.golang.org/doc/go1.22
    建议看一下这个版本的 release note
    thevita
        3
    thevita  
       12 小时 10 分钟前
    这个问题吧: https://go.dev/blog/loopvar-preview

    具体来说, golang 在 loop 的行为在 1.22 之后变了
    sunny352787
        4
    sunny352787  
       12 小时 10 分钟前
    你用的 sdk 版本和示例不一样,golang 的 sdk 中间改过一次
    960930marui
        5
    960930marui  
    OP
       12 小时 2 分钟前
    @ippolito 嗯嗯 我猜测也是这个, 但是不知道再哪里搜哈哈, 下面有 v 友放链接了, 我好好看下
    960930marui
        6
    960930marui  
    OP
       12 小时 1 分钟前
    @gkirito 好的感谢 v 友, 了解啦
    sky3hao9
        7
    sky3hao9  
       11 小时 41 分钟前
    之前遇到过这个坑, 后来用 for v, _ := range some { newV := v; go .... 这种解决的
    unclejimao
        8
    unclejimao  
       11 小时 36 分钟前
    @thevita 沃日,以前还把延迟绑定当做特性去理解的,没想到是 Bug ?
    mizuki9
        9
    mizuki9  
       11 小时 7 分钟前
    go 一直存在的一个 bug ,存在很久导致人们把它当成 feature 了。然后在 1.22 版本,go 说我们把这个 bug 修复了
    rekulas
        10
    rekulas  
       10 小时 15 分钟前
    也不能完全说是 bug 吧,要真被定义为 bug 他们早就修复了,主要是社区之前觉得这个不是问题,一直拖到最近 2 年声音大了才决定修改,感觉 go 社区核心人员也挺头铁的,反正很多优化用户提了很久也不甩你
    qxmqh
        11
    qxmqh  
       5 小时 6 分钟前
    版本问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3068 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 14:10 · PVG 22:10 · LAX 07:10 · JFK 10:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.