golang 特别“别扭”的地方,或者说是特色

 

尽管 Go 语言在很多方面设计得相当精巧,但仍有一些特性或限制可能让部分开发者觉得 “别扭” 或需要时间适应。

下面是一些常见的讨论点:

1. 错误处理:

  Go 语言没有异常机制,而是通过返回错误值的方式来处理错误。

  这意味着在很多函数调用后都需要检查错误,可能会导致代码中出现大量的错误检查逻辑,有时显得冗长。

 

2. 类型系统限制:

  Go 缺乏泛型,直到 Go 1.18 版本才正式引入泛型支持golang 泛型的格式写法

  在此之前,为不同类型编写通用代码时,可能需要复制粘贴或者使用接口和类型断言,增加了代码量和维护难度。

 

3. 依赖管理历史问题:

  虽然现在有了官方的 go mod 来管理依赖,但在早期,Go 的依赖管理方案(如 Glide、Dep 等第三方工具)相对混乱,给开发者带来了一些困扰。

 

4. 接口实现不透明:

  接口实现是隐式的,这简化了代码,但也可能导致不小心实现了某个接口,或者难以从代码中直接看出哪些类型实现了哪些接口。

 

5. 初始化顺序:

  包级别的初始化函数(通过 init 函数)按照导入包的顺序执行,这可能导致不易预测的初始化顺序,尤其是在大型项目中。

 

6. 反射的局限性:

  虽然 Go 支持反射,但与一些动态语言相比,反射功能相对有限,尤其是在修改变量值或调用非导出函数方面。

 

7. 缺少某些现代语言特性:

  如上所述,直到较晚版本才加入泛型,且没有类和继承、运算符重载、默认参数等特性,这些在某些场景下可能会限制表达能力。


这些 “别扭” 之处并不意味着 Go 语言设计不佳,而是反映了任何语言设计都需在各种权衡中做出选择。

开发者根据具体需求和偏好,可能会有不同的感受。

 

Link:https://www.cnblogs.com/farwish/p/18237638

posted on   ercom  阅读(37)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2023-06-11 [GPT] Unable to negotiate with xx.xx.xx.xx port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
2023-06-11 [GPT] ./ssh/known_hosts 是什么
2023-06-11 [GPT] jquery chosen插件选择的多个元素是逗号分隔的,怎么设置成其它分隔符号 ?
2023-06-11 [GPT] js 外部参数怎么传给 setTimeout 的匿名函数 ?
2023-06-11 [GPT] 监测输入框被 js 设置了值 ?input 输入框被设置了 value 值,但是没有触发 change 事件?
2023-06-11 [GPT] php 报错 Unsupported operand types
2020-06-11 [FE] WebStorm, ESLint: Trailing spaces not allowed

统计

点击右上角即可分享
微信分享提示