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

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

  •  
  •   HFX3389 · 2024-08-27 22:53:16 +08:00 · 5345 次点击
    这是一个创建于 371 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我是 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

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

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

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

    我是选用特定版本:最后一个支持 Win7 的版本
    zsh2517
        6
    zsh2517  
       2024-08-28 01:45:11 +08:00
    一般我首次配置环境的时候,会选择最新版本(如 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  
       2024-08-28 01:49:08 +08:00
    @zsh2517 简单概括就是,不一定会用新特性,但是版本会持续更新。基本始终用最新/次新大版本,一段时间更新一次。go/python 这种 major 版本不变的按 minor 来,node 这种 major 会更新的按 major 来(三位版本号通常叫做 major.minor.patch ,参考 https://semver.org/lang/zh-CN/)
    alsas
        8
    alsas  
       2024-08-28 08:38:56 +08:00
    @NewYear 同使用支持 win7 的版本 1.20.14
    ClarkAbe
        9
    ClarkAbe  
       2024-08-28 08:55:30 +08:00
    每天 `pacman -Syu` 就更新了, 有最新当然是最新的好...甚至线上服务器都是 Arch
    masterclock
        10
    masterclock  
       2024-08-28 08:57:02 +08:00
    不主动更新,直到需要某个特性,外部包依赖强制要求升级等
    Desdemor
        11
    Desdemor  
       2024-08-28 08:57:18 +08:00
    我现在用 1.23, 但是泛型都还没用上
    layxy
        12
    layxy  
       2024-08-28 09:21:09 +08:00
    一直保持最新,go 的版本兼容性还行,编译后扔到哪里都可以,而且 go 的三方包更新也很快,有部分会用到新版本特性,所以干脆一直保持最新版本
    mshadow
        13
    mshadow  
       2024-08-28 09:23:32 +08:00 via Android
    之前一直更新,后面停在 1.21 最后的小版本。1.22 之后理念不符。
    zdt3476
        14
    zdt3476  
       2024-08-28 09:41:05 +08:00
    我们公司是生产环境会用次新的偶数版本。
    ByteCat
        15
    ByteCat  
       2024-08-28 09:43:33 +08:00
    一直最新 scoop update *
    georgetso
        16
    georgetso  
       2024-08-28 09:45:17 +08:00
    @0o0O0o0O0o 破坏性更新怎么办?
    sunny352787
        17
    sunny352787  
       2024-08-28 09:50:51 +08:00
    生产环境用次新大版本,最新 1.23 那么线上就可以用 1.22
    开发组员与线上版本同步,组长使用最新版本进行前瞻测试并制定规范,比如这次的 1.23 这个 range 就是我试过之后禁止组员使用的
    cnbattle
        18
    cnbattle  
       2024-08-28 09:51:49 +08:00
    go 1.x 都是向下兼容,至今没有破坏性更新, 所有无特殊需要 都是更新最新版,新版的一些优化,反而可以让之前的程序更高效些
    hingle
        19
    hingle  
       2024-08-28 10:02:32 +08:00
    go 1.23 也不支持 macOS 10.15 了
    0o0O0o0O0o
        20
    0o0O0o0O0o  
       2024-08-28 10:10:53 +08:00
    @georgetso #16

    1. major 之外不会有**语言层面的**破坏性更新,major 维护时间是一年,有半年的时间做迁移
    2. major 的破坏性更新很少,在因为修复错误或者漏洞而不得不破坏时,也承诺提供机制来保持兼容性 https://go.dev/doc/go1compat https://go.dev/doc/godebug
    3. 停止维护的版本会有已知漏洞,我觉得这个优先级更高
    fuxiaohei
        21
    fuxiaohei  
       2024-08-28 10:14:39 +08:00   ❤️ 1
    Go 会维护最近的两个或三个版本。如果没用上新特性,可以跟老版本的最近更新。比如发布了 1.23.0 ,就用 1.22.6 。以后 1.24 发布了,用 1.23.x 。
    picone
        22
    picone  
       2024-08-28 10:16:23 +08:00
    @cnbattle 其实有的,只是不痛不痒的特性而已。比如 1.23 修改了 time.Timer 的 channel 特性
    georgetso
        23
    georgetso  
       2024-08-28 10:24:44 +08:00
    knva
        24
    knva  
       2024-08-28 10:59:20 +08:00
    不知道哪个是最新版本。
    DefoliationM
        25
    DefoliationM  
       2024-08-28 12:25:18 +08:00 via Android
    永远最新。
    securityCoding
        26
    securityCoding  
       2024-08-28 12:46:09 +08:00
    rc 前一个版本
    rekulas
        27
    rekulas  
       2024-08-28 13:16:40 +08:00
    我一般落后 2 个月更新到最新 毕竟向下兼容做的还是可以基本问题不大
    815979670
        28
    815979670  
       2024-08-28 13:29:05 +08:00   ❤️ 1
    个人习惯 用上一个子版本的最新版 就是第二位版本号 -1 ,然后第三位最新版
    lasuar
        29
    lasuar  
       2024-08-28 13:42:37 +08:00
    只要没大的 bug 和你需要的功能更新,就没必要追。目前一直用的是 1.20.12 (注意小版本号是最高的那个),泛型还是有必要的,因为 lo 这个泛型库特别需要。
    gouwazi
        30
    gouwazi  
       2024-08-28 15:41:58 +08:00
    之前是立马就更新,但是自从 1.21.0 的 bug( https://github.com/golang/go/issues/61881)影响到业务后,现在是等.1 出来再更新
    fishcat
        31
    fishcat  
       2024-08-28 17:48:15 +08:00
    忘了啥时候,遇到过一个 bug, 只有新版本有,后来就不怎么跟着升级版本
    xiaozirun
        32
    xiaozirun  
       2024-08-28 18:20:23 +08:00
    很多时候是为了用某些包的新功能才升级版本😂
    jeesk
        33
    jeesk  
       2024-08-28 22:49:46 +08:00
    @ClarkAbe 一样。 不过很多工具链都是自己管理版本, 都不可能用最新的。
    zi
        34
    zi  
       2024-08-29 03:08:03 +08:00
    我用.0 的上一个版本,直到下一个.0 发布再一次过升级到该.0 的上一个版本。
    也就是一直保持用第二位的最后一个小版本
    qloog
        35
    qloog  
       315 天前
    @815979670 如这位同学所说

    也就是更新到次新版本,比如现在是 1.23.0 ,1.22 里可能有 1.22.5, 1.22.6, 1.22.7, 那么就更新到 1.22.7
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3071 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 11:56 · PVG 19:56 · LAX 04:56 · JFK 07:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.