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 2024-06-11 21:57  ercom  阅读(10)  评论(0编辑  收藏  举报