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

大家用 Go 写程序时会追新版本吗?追大版本还是追小版本?

  •  
  •   HFX3389 · 17 天前 · 4169 次点击

    我是 Go 语言新手,感觉 Golang 发版发的挺勤快的,我学习使用这个语言时最新的版本是1.22.4 (发布于 2024-06-04 )

    自从安装完环境后就很少管,今天上官网看了下大版本更新已经出到1.23.0 (发布于 2024-08-13 )了,小版本更新也出到1.22.6 (发布于 2024-08-06 )

    之前论坛也有过讨论1.23 的新特性 range over func 帖子,帖子评论也说新特性有好有坏。

    而且 Go 也有过从 1.21 开始不支持 Win7 的例子,虽然可以撤销数个 commit 让 1.21 、1.22 重新支持回 Win7 ,具体操作在这个帖子的第 22 楼和第 23 楼,但这总归不是好办法。

    说不定哪个新版本就会导致现在旧的“屎山”代码不能编译或不支持旧系统,所以想问一下大伙用 Go 写程序时会追新版本吗?追大版本还是追小版本?

    还是说你发任你发 我用 Java8

    34 条回复    2024-08-29 03:08:03 +08:00
    0o0O0o0O0o
        1
    0o0O0o0O0o  
       17 天前 via iPhone   ❤️ 2
    新特性不一定第一时间用起来,但版本一定保持最新
    loveuer
        2
    loveuer  
       17 天前 via Android
    range over func 已经用起来了,怎么说呢,个人体验很舒服。很多人提到复杂,其实官方用 iter 包帮你简化了,视觉观感也不错。
    Felldeadbird
        3
    Felldeadbird  
       17 天前
    我电脑开发环境还是 go version go1.20.2

    我没有 win7 包袱,也对新语法没太大想法。目前先把业务写完,跑起来再考虑新语法的事情了。
    AEnjoyable
        4
    AEnjoyable  
       17 天前 via Android
    公司这边会在下一个版本.1 之后用.0 一直到下一个大版本.1 发布再用新版本
    (小版本会一直跟进)
    NewYear
        5
    NewYear  
       17 天前
    golang 这种不注重版本号的语言,哪有什么大版本啊。

    十几年了还是 1.x ,完全分不清哪些版本号是大版本。

    我是选用特定版本:最后一个支持 Win7 的版本
    zsh2517
        6
    zsh2517  
       17 天前
    一般我首次配置环境的时候,会选择最新版本(如 OP 提到的 1.23.0 )/次新版本的最新小版本( 1.22.6 ),安装完之后很长一段时间就不会再换了。等到过一段时间(几个月),再次突然想起来的时候,就再次更新成此时的最新版本/此新版本的最新小版本。

    我常用的三个语言来说,Go 有 goenv/smart-go-dl ,python 有 pyenv, Node.js 有 nvm/n ,版本更新也就几行命令的事。不勤更新单纯就是懒得关注第三位版本号(

    例外:

    1. 如果项目有指定特定的版本,那么用要求的版本运行和开发项目(没有就装),但是不会设置为该语言的默认版本。其他场景下仍然使用较新版本的环境
    2. 对于不常用的语言且系统包管理器内的能满足需求,不单独自己安装额外的管理工具,直接用系统源的包,系统源是啥就用啥(对我来说如 Java 、Rust 、C/C++)
    zsh2517
        7
    zsh2517  
       17 天前
    @zsh2517 简单概括就是,不一定会用新特性,但是版本会持续更新。基本始终用最新/次新大版本,一段时间更新一次。go/python 这种 major 版本不变的按 minor 来,node 这种 major 会更新的按 major 来(三位版本号通常叫做 major.minor.patch ,参考 https://semver.org/lang/zh-CN/)
    alsas
        8
    alsas  
       17 天前
    @NewYear 同使用支持 win7 的版本 1.20.14
    ClarkAbe
        9
    ClarkAbe  
       17 天前
    每天 `pacman -Syu` 就更新了, 有最新当然是最新的好...甚至线上服务器都是 Arch
    masterclock
        10
    masterclock  
       17 天前
    不主动更新,直到需要某个特性,外部包依赖强制要求升级等
    Desdemor
        11
    Desdemor  
       17 天前
    我现在用 1.23, 但是泛型都还没用上
    layxy
        12
    layxy  
       17 天前
    一直保持最新,go 的版本兼容性还行,编译后扔到哪里都可以,而且 go 的三方包更新也很快,有部分会用到新版本特性,所以干脆一直保持最新版本
    mshadow
        13
    mshadow  
       17 天前 via Android
    之前一直更新,后面停在 1.21 最后的小版本。1.22 之后理念不符。
    zdt3476
        14
    zdt3476  
       17 天前
    我们公司是生产环境会用次新的偶数版本。
    ByteCat
        15
    ByteCat  
       17 天前
    一直最新 scoop update *
    georgetso
        16
    georgetso  
       17 天前
    @0o0O0o0O0o 破坏性更新怎么办?
    sunny352787
        17
    sunny352787  
       17 天前
    生产环境用次新大版本,最新 1.23 那么线上就可以用 1.22
    开发组员与线上版本同步,组长使用最新版本进行前瞻测试并制定规范,比如这次的 1.23 这个 range 就是我试过之后禁止组员使用的
    cnbattle
        18
    cnbattle  
       17 天前
    go 1.x 都是向下兼容,至今没有破坏性更新, 所有无特殊需要 都是更新最新版,新版的一些优化,反而可以让之前的程序更高效些
    hingle
        19
    hingle  
       17 天前
    go 1.23 也不支持 macOS 10.15 了
    0o0O0o0O0o
        20
    0o0O0o0O0o  
       17 天前
    @georgetso #16

    1. major 之外不会有**语言层面的**破坏性更新,major 维护时间是一年,有半年的时间做迁移
    2. major 的破坏性更新很少,在因为修复错误或者漏洞而不得不破坏时,也承诺提供机制来保持兼容性 https://go.dev/doc/go1compat https://go.dev/doc/godebug
    3. 停止维护的版本会有已知漏洞,我觉得这个优先级更高
    fuxiaohei
        21
    fuxiaohei  
       17 天前
    Go 会维护最近的两个或三个版本。如果没用上新特性,可以跟老版本的最近更新。比如发布了 1.23.0 ,就用 1.22.6 。以后 1.24 发布了,用 1.23.x 。
    picone
        22
    picone  
       17 天前
    @cnbattle 其实有的,只是不痛不痒的特性而已。比如 1.23 修改了 time.Timer 的 channel 特性
    georgetso
        23
    georgetso  
       17 天前
    knva
        24
    knva  
       17 天前
    不知道哪个是最新版本。
    DefoliationM
        25
    DefoliationM  
       17 天前 via Android
    永远最新。
    securityCoding
        26
    securityCoding  
       17 天前
    rc 前一个版本
    rekulas
        27
    rekulas  
       17 天前
    我一般落后 2 个月更新到最新 毕竟向下兼容做的还是可以基本问题不大
    815979670
        28
    815979670  
       17 天前
    个人习惯 用上一个子版本的最新版 就是第二位版本号 -1 ,然后第三位最新版
    lasuar
        29
    lasuar  
       17 天前
    只要没大的 bug 和你需要的功能更新,就没必要追。目前一直用的是 1.20.12 (注意小版本号是最高的那个),泛型还是有必要的,因为 lo 这个泛型库特别需要。
    gouwazi
        30
    gouwazi  
       17 天前
    之前是立马就更新,但是自从 1.21.0 的 bug( https://github.com/golang/go/issues/61881)影响到业务后,现在是等.1 出来再更新
    fishcat
        31
    fishcat  
       17 天前
    忘了啥时候,遇到过一个 bug, 只有新版本有,后来就不怎么跟着升级版本
    xiaozirun
        32
    xiaozirun  
       16 天前
    很多时候是为了用某些包的新功能才升级版本😂
    jeesk
        33
    jeesk  
       16 天前
    @ClarkAbe 一样。 不过很多工具链都是自己管理版本, 都不可能用最新的。
    zi
        34
    zi  
       16 天前
    我用.0 的上一个版本,直到下一个.0 发布再一次过升级到该.0 的上一个版本。
    也就是一直保持用第二位的最后一个小版本
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4072 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 10:01 · PVG 18:01 · LAX 03:01 · JFK 06:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.