首页 游戏 软件 资讯 排行榜 专题
首页
科技数码
Go数据打脸刻板印象:样板代码真比Rust多吗?

Go数据打脸刻板印象:样板代码真比Rust多吗?

热心网友
43
转载
2026-02-09

Go语言因其精简的特性设计,使得逻辑表达往往需要依赖显式的重复代码;而Rust选择了丰富的语言特性(宏、泛型、Trait),其结果则是开发者必须编写大量的结构性代码来支撑这些特性。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

大家好,我是Tony Bai。

在编程语言的鄙视链中,Go语言常因其看似“繁琐”而饱受诟病。

“if err != nil写到手断”、“缺少语法糖”、“到处都是重复的样板代码”……这些几乎已经成了Go的标志性吐槽。

相比之下,Rust则常被视为“表达力”的代表,拥有强大的宏、模式匹配和类型系统,被认为能用更少的代码做更多的事。

然而,Ben Boyter最近的一项硬核研究,通过分析GitHub上各语言Top 100仓库(总计约4亿行代码),得出了一个令编程社区大跌眼镜的结论:

在代码重复率和“样板代码”密度上,Go和Rust几乎处于同一水平线。

不仅是行数:ULOC 指标

传统的SLOC(源代码行数)往往无法真实反映项目的复杂度和冗余度。Ben Boyter使用了他开发的工具scc中的一个特殊指标:ULOC (Unique Lines of Code,唯一代码行数)。

ULOC指标并非简单的“全量去重”,而是通过剥离“结构性噪音”来更精准地衡量系统的真实复杂度。其计算逻辑是:

剔除结构化冗余:不仅排除了空行,还排除了单纯的闭合大括号行(})以及在不同文件中大量出现的公共引用代码(如include或import)。过滤文件级模板:有效识别并扣除在项目中每个文件顶部几乎完全相同的License(许可证)声明头,避免这些非逻辑性的“样板文字”虚增代码总量。计入注释成本:与传统SLOC不同,ULOC会保留注释统计。作者认为,注释与代码一样需要同等的维护精力,反映了开发者的思考过程,因此属于“有效工作量”。

通过这种方式计算出的Dryness(干度),代表了剔除了“语法支架”和“版权模板”后,真正的业务逻辑与注释在代码中的占比。百分比越高,说明重复代码越少,信息密度越高;百分比越低,说明“样板代码”或重复结构越多。

令人震惊的对比:Go vs Rust

让我们直接看数据(数据来源:GitHub Top 100 仓库分析,2026年2月):

发现了吗?Rust (60.5%) 和 Go (58.78%) 的差距微乎其微,甚至可以说在统计学上是等价的。

Ben Boyter在文章中坦言,他之前也持有“Go的样板代码比Rust多得多”的刻板印象。但数据表明,虽然两者的“啰嗦”方式不同,但结果是一样的:

Go的啰嗦:体现在显式的错误处理、显式的循环结构,以及为了简单性而不得不写的重复逻辑。Rust的啰嗦:体现在复杂的类型系统设置、Trait的实现(impl blocks),以及为了满足借用检查器而编写的“仪式性”代码。

正如作者所总结的:

Go狂热者:“Go很简单!” -> “是的,简单到你需要把同一件事写很多遍。” Rust狂热者:“Rust表达完美!” -> “是的,但你花了40%的时间在写setup代码和trait实现。”

其他颠覆性的发现

除了Go和Rust的“握手言和”,这份报告还有几个极具冲击力的发现:

1. Lisp 家族是“干度之王”

Clojure 以 77.91% 的惊人密度位居榜首。Haskell 紧随其后。

这验证了一个古老的观点:如果你想要最高的“人类思想 vs 击键次数”比率,Lisp和函数式语言依然是王者。它们几乎每一行代码都是纯粹的业务逻辑。

2. Java 居然比 Go 和 Rust 都“干”?

Java的得分为65.72%,显著高于Go、Rust和C#。

这听起来反直觉,毕竟Java以PublicStaticVoidMain这种冗长著称。但这可能说明:现代Java及其生态(Spring等)通过注解等方式极大地消除了样板代码。或者,Top 100的Java项目多为成熟的业务系统,核心逻辑占比大,而Go/Rust项目中系统级代码(通常包含更多底层重复逻辑)较多。

3. 脚本语言的特性

Shell Script的密度极高(72.24%),但这主要是因为Shell脚本通常很短且高度定制化(Bespoke),很难复用,因此“唯一性”很高。

小结:复杂度的守恒

这个研究告诉我们一个道理:语言特性(Features)并不一定能消除复杂度,它往往只是转移了复杂度。

Go选择了少量的特性,导致逻辑必须通过显式的重复代码来表达;Rust选择了丰富的特性(宏、泛型、Trait),导致开发者必须编写大量的结构性代码来支撑这些特性。

对于Gopher来说,这或许是一种宽慰:别再为if err != nil感到羞愧了。隔壁写Rust的兄弟,虽然代码看起来很酷,但他们为了让编译器开心而敲击键盘的次数,并不比你少。

来源:https://www.51cto.com/article/836117.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

golang怎么储存
编程语言
golang怎么储存

Golang无统一存储方案,需据数据特性选方式:临时状态用sync Map或加锁map;文件存储需原子写入;数据库应抽象接口;Redis存值须序列化且带命名空间前缀。 直接说结论:在Go语言里,你找不到一个“万能”的存储方案。怎么存,完全取决于你要存什么、存多久、谁来读、并发压力有多大。选错了方式,

热心网友
04.28
什么是 Go 中的符号表
编程语言
什么是 Go 中的符号表

Go二进制符号表:不只是调试信息,更是运行时基础设施 先明确一个核心概念:Go二进制里的符号表,远不止是给调试器准备的“辅助信息”。它更像是编译器在构建时,为整个Go生态体系埋下的一套“导航地图”。这张地图上,清晰地标注了程序中几乎所有的命名实体——从入口函数main main,到全局变量main

热心网友
04.28
如何在 Go 中实现全局唯一的 Request ID
编程语言
如何在 Go 中实现全局唯一的 Request ID

如何在 Go 中实现全局唯一的 Request ID 为什么不能直接用 uuid New() 做 Request ID? 直接在 HTTP handler 里调用 uuid New(),生成一个唯一 ID 当然没问题。但问题出在哪呢?它和整个请求的生命周期脱钩了。这意味着,你的中间件、日志记录器、下

热心网友
04.28
实战使用 Golang 构建一个简单的发布订阅模式
编程语言
实战使用 Golang 构建一个简单的发布订阅模式

实战使用 Golang 构建一个简单的发布订阅模式 为什么直接用 sync Map 而不是自己加锁的 map? 在构建发布订阅系统时,核心挑战之一就是高频并发读写。多个 goroutine 可能同时发布事件,订阅者的注册和取消也随时在发生。如果自己用普通的 map 搭配 sync RWMutex,一

热心网友
04.28
Golang 如何限制并发数
编程语言
Golang 如何限制并发数

Golang 如何限制并发数 用 sync Semaphore(Go 1 21+)最稳妥 从Go 1 21开始,标准库自带的 sync Semaphore 就成了生产环境的首选方案。它可不是一个简单的计数器,而是一个功能完备的信号量实现,支持权重、上下文取消,并且是panic安全的。 不过,用起来有

热心网友
04.28

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

霸王茶姬回应顾客喝出水银:高度重视 一切以调查结果为准
业界动态
霸王茶姬回应顾客喝出水银:高度重视 一切以调查结果为准

霸王茶姬回应顾客喝出疑似水银物质:门店称流程不可能出现,正配合调查 近日,一则关于新茶饮的消费纠纷引发了广泛关注。据媒体报道,安徽宿州一位消费者反映,其在霸王茶姬砀山万达广场门店购买的饮品中,发现了疑似水银的液态金属物质。 根据消费者描述,事情始于饮用时尝到的异常颗粒感。随后仔细查看,竟在杯底发现了

热心网友
04.28
车身升高、中控屏加大!二代哈弗H9 2026款上市:17.49万起
业界动态
车身升高、中控屏加大!二代哈弗H9 2026款上市:17.49万起

2026款哈弗H9正式上市:硬派越野的全面进阶 4月28日,备受关注的2026款哈弗H9公布了最新动态。新车指导价定在19 99万至24 79万元区间,并推出了颇具吸引力的限时换新价——17 49万元起,顶配车型也仅需22 29万元。这个价格策略,无疑让硬派越野的门槛变得更亲民了。 外观:硬朗气场再

热心网友
04.28
Ubuntu系统Java路径怎么配置
编程语言
Ubuntu系统Java路径怎么配置

在Ubuntu系统中配置Ja va路径 在Ubuntu系统里配置Ja va环境,其实是个挺常见的需求。这事儿说简单也简单,核心就两步:设置好JA VA_HOME环境变量,再把Ja va的可执行文件路径加到PATH里。下面咱们就一步步来,把这事儿彻底搞定。 第一步:安装Ja va 如果你系统里还没装J

热心网友
04.28
小米汽车公布五一假期专项售后服务:24小时不限里程免费救援、赠送500打车券
业界动态
小米汽车公布五一假期专项售后服务:24小时不限里程免费救援、赠送500打车券

小米汽车发布五一假期专项售后服务,为车主出行保驾护航 五一假期将至,出行高峰随之而来。就在今天,小米汽车正式发布了针对2026年五一假期的专项售后服务保障方案。这项服务聚焦车主在假期出行中可能遇到的各类突发状况,推出了一系列重磅权益,覆盖了整个假期时段,从4月29日一直持续到5月6日。 此次专项服务

热心网友
04.28
Ubuntu中Java内存设置如何调整
编程语言
Ubuntu中Java内存设置如何调整

在Ubuntu系统中调整Ja va内存设置 在Ubuntu系统上运行Ja va应用,内存配置是个绕不开的话题。调得好,应用跑得飞快;调得不对,性能瓶颈甚至崩溃都可能找上门。好在调整方法并不复杂,关键得找准场景。下面这张图,可以帮你快速建立起一个直观的印象: 接下来,咱们就聊聊几种主流的调整路径,你可

热心网友
04.28