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

2024-08-27 22:53:16 +08:00
 HFX3389

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

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

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

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

我是选用特定版本:最后一个支持 Win7 的版本
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
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
2024-08-28 08:38:56 +08:00
@NewYear 同使用支持 win7 的版本 1.20.14
ClarkAbe
2024-08-28 08:55:30 +08:00
每天 `pacman -Syu` 就更新了, 有最新当然是最新的好...甚至线上服务器都是 Arch
masterclock
2024-08-28 08:57:02 +08:00
不主动更新,直到需要某个特性,外部包依赖强制要求升级等
Desdemor
2024-08-28 08:57:18 +08:00
我现在用 1.23, 但是泛型都还没用上
layxy
2024-08-28 09:21:09 +08:00
一直保持最新,go 的版本兼容性还行,编译后扔到哪里都可以,而且 go 的三方包更新也很快,有部分会用到新版本特性,所以干脆一直保持最新版本
mshadow
2024-08-28 09:23:32 +08:00
之前一直更新,后面停在 1.21 最后的小版本。1.22 之后理念不符。
zdt3476
2024-08-28 09:41:05 +08:00
我们公司是生产环境会用次新的偶数版本。
ByteCat
2024-08-28 09:43:33 +08:00
一直最新 scoop update *
georgetso
2024-08-28 09:45:17 +08:00
@0o0O0o0O0o 破坏性更新怎么办?
sunny352787
2024-08-28 09:50:51 +08:00
生产环境用次新大版本,最新 1.23 那么线上就可以用 1.22
开发组员与线上版本同步,组长使用最新版本进行前瞻测试并制定规范,比如这次的 1.23 这个 range 就是我试过之后禁止组员使用的
cnbattle
2024-08-28 09:51:49 +08:00
go 1.x 都是向下兼容,至今没有破坏性更新, 所有无特殊需要 都是更新最新版,新版的一些优化,反而可以让之前的程序更高效些
hingle
2024-08-28 10:02:32 +08:00
go 1.23 也不支持 macOS 10.15 了
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. 停止维护的版本会有已知漏洞,我觉得这个优先级更高

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1068285

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX