当前位置: 首页 > 后端技术 > Java

醒醒,以后没有Go2!

时间:2023-04-02 01:25:28 Java

大家好,我是炸鱼。春节快到了,节前最后一次更新。提前祝大家新春快乐!这个周末在学习的时候,看到了Go团队的负责人RussCox(以下简称rsc)最近的分享《GopherCon 2022: Russ Cox - Compatibility: How Go Programs Keep Working》,里面谈到了Go在兼容性方面存在的问题和思考,埋下了一个新期待。如下图所示:他提出了一个新的Slogan:“Goisboring,andthat'sgood”。(Go很无聊,那很好。)原因是Go很无聊很好,因为无聊代表稳定。无聊意味着你可以专注于你的工作,而不是我们的。Go团队的核心是希望Go足够简洁。Gophers不应该把所有的时间都花在思考Go的巧妙思想上,而应该专注于自己的工作而不是他们。一开始听着有点道理,有点自己的想法,但是听了这车,就停不下来了。最后,rsc突然官宣:不会有Go2,会一直维护Go1,并且会加倍投入在Go1兼容的建设上,这会很有价值。如下图所示:当然,他也说狭义的Go2可能已经发生了,只是慢慢转移到Go1的新特性上,融入了Go。最重要的是,不兼容的“新”事物怎么办?大方向的大动作在之前的文章《加大力度!Go 将会增强 Go1 向后兼容性》中已经介绍过了。核心之一:使用Go项目中go.mod文件中的go版本号来控制编译的选择。决定了每个库在不同的Go版本下以不同的方式应用它的特性,这会影响编译时的决定。如下图所示:主模块:声明go版本为1.19,他可以使用泛型和带下划线的数字。模块Av1.0.0:声明go版本为1.17,模块A中的包不能使用泛型(1.18才支持),带下划线的数字可以正常使用。ModuleBv1.2.1:声明go版本为1.12,两者都不能使用。在上面的描述中,主模块、模块A、模块B根据go.mod中的go版本号分别应用于不同的可用特性(有的可以使用泛型,有的不能使用带下划线的数字,有的不能使用,ETC。)。其实质就是结合Gomodules原有的依赖管理逻辑,然后针对不同版本的不同特性复用go.mod的go版本号,完成编译控制逻辑。以后不会有Go2,会有Go1.x。我找到了各种可以塞进去的位置。文章持续更新中。可以微信搜索【脑补炸鱼】阅读。本文已收录在GitHubgithub.com/eddycjy/blog中。学习Go语言可以看Go学习地图和路线。欢迎星星提醒。Go书系列Go语言入门系列:初探Go项目实战Go语言编程之旅:深入使用Go做项目Go语言设计哲学:理解Go的Why与设计思维Go语言进阶之旅:进一步深入-深度Go源码推荐阅读Go1。20号更新了两次时间,终于不用背2006-01-0215:04:05了!打脸兄弟们,Go1.20竞技场来了!Go十年,终于想起统一日志库!