我在 Go 中怀念的事物的无序列表—kokada

主要观点:作者喜欢 Go 语言,但认为其仍有可改进之处,列举了从其他语言中怀念 Go 所缺失的一些特性。
关键信息:

  • 标准库中的有序映射:Go 的map是哈希表,元素顺序随机,缺乏像 Python 中OrderedDict那样的有序映射。Go 1.23 后有了range-over-func,可通过第三方库实现有序映射。
  • 函数的关键字和默认参数:Go 缺乏默认参数,影响了标准库的一些 API 设计,如string.Replace
  • 可空性(nillability):Go 不像 Kotlin 那样支持通用的可空性解决方案,但在很多情况下使用零值而不是nil减少了nil值的问题,要改变需对语言进行重大修订。
  • Lambda 表达式:Go 中使用func实现匿名函数,语法较繁琐,若有 Lambda 表达式语法会更简洁,此特性仍有讨论且未关闭相关 issue。
  • 未使用返回值的错误检查:Go 中忽略错误较常见,若有未使用返回值的警告或错误,能避免一些错误,如errcheck linter 存在但语言本身不强制。

重要细节:

  • Go 的map随机化每个实例的哈希种子以避免开发者依赖特定迭代顺序。
  • 增加有序映射到标准库可减少第三方库的使用摩擦,除非有特定需求才使用第三方库。
  • 默认参数可使string.Replace函数更简洁,无需strings.ReplaceAll
  • 改变可空性可能需要对语言进行重大修订,如 Java 方式添加nullable类型或像 Dart 那样成功实现空安全,但都有困难。
  • Go 1.23 的range-over-func实验展示了匿名函数的使用方式,Lambda 表达式可简化代码。
  • 忽略错误可能导致难以调试的问题,错误检查可提高代码质量,errcheck linter 存在但不强制。
阅读 29
0 条评论