大家好,我是煎鱼。
马上春节了,节前最初一更。提前预祝大家春节快乐!
本周末在学习的时候,看到 Go 团队大当家 Russ Cox(下称:rsc)在近期分享的《GopherCon 2022: Russ Cox – Compatibility: How Go Programs Keep Working》,讲的是 Go 在兼容性方面的现有问题和思考,还埋了个新预期。
如下图:
他提出了一个新的 Slogan:“Go is boring, and that’s good.(Go 很无聊,这很好)”,起因在于 Go 无聊是好的,因为无聊代表稳固的。无聊意味着你可能专一于你的工作,而不是咱们的工作。
外围来讲,Go 团队心愿 Go 足够简洁,Gopher 不要终日卷 Go 的各种奇思妙计,要把精力都关注到本人的工作上,不要关注他们。
我一开始听起来多少有点情理和本人的想法,听着听着这个车就刹不住了。
在最初的最初,rsc 冷不丁的正式官宣:不会有 Go2 了,会始终放弃 Go1,将会加倍投入对 Go1 兼容性的建设,这将十分有价值。
如下图:
当然,他也讲了,广义里的 Go2 可能曾经产生了,只是缓缓转为了 Go1 的新个性融入到了 Go 之中。
最重要的,那些没法兼容的“新”货色怎么办?大方向的大招曾经在前文《加大力度!Go 将会加强 Go1 向后兼容性》有介绍过。
外围之一:应用 Go 工程中的 go.mod 文件内的 go 版本号来管制编译 的抉择,决定各个库在不同 Go 版本下以不同的体现来利用其个性,将会影响编译时的决定。
如下图:
- 主模块(main module):申明 go 版本是 1.19,他能够应用泛型和带下划线的数字。
- 模块 A v1.0.0:申明 go 版本是 1.17,模块 A 里的包不能够应用泛型(1.18 才开始反对),带下划线的数字能够失常应用。
- 模块 B v1.2.1:申明 go 版本是 1.12,两者都不能用。
在上述阐明中,主模块、模块 A、模块 B,别离依据 go.mod 内的 go 版本号,利用到了不同的可用个性(有的能够用泛型,有的不能够用带下划线的数字,有的都不能用等)。
这实质是联合 Go modules 本来的依赖治理逻辑,再复用 go.mod 的 go 版本号给不同版本的不同个性来做好编译的管制逻辑。
将来将不会有 Go2,都会是 Go1.x。
曾经找到能往里各种塞的姿态了。
文章继续更新,能够微信搜【脑子进煎鱼了】浏览,本文 GitHub github.com/eddycjy/blog 已收录,学习 Go 语言能够看 Go 学习地图和路线,欢送 Star 催更。
Go 图书系列
- Go 语言入门系列:初探 Go 我的项目实战
- Go 语言编程之旅:深刻用 Go 做我的项目
- Go 语言设计哲学:理解 Go 的为什么和设计思考
- Go 语言进阶之旅:进一步深刻 Go 源码
举荐浏览
- Go1.20 中两个对于 Time 的更新,终于不必背 2006-01-02 15:04:05 了!
- 打脸了兄弟们,Go1.20 arena 来了!
- Go 十年了,终于想起要对立 log 库了!