TOC

转载:Diss Golang

  1. 泛型,先抛弃,后又加入
    证据:Golang 泛型“回头草”案:Contracts — Draft Design
  2. 异常,必须使用 pkg/errors 模拟异常处理 pkg/errors
    提示:- errors.Wrap —— ex1 = new Exception(ex1) - errors.WithStack ——手动模拟异常的 stacktrace 特性
    另外,这样还不足以弥补类型系统给异常处理带来的缺陷。如果数据库 driver 使用 errors.WithStack 把 TCP 层的异常包起来的话,那么 TCP 层的细节就会泄露给 driver 的调用者,归根结底是残缺的异常类型系统的锅。
  3. Channel
    Channel vs Promise (aka Task (PS: Task 类)):在 Task 中,数据返回和过程执行完毕是耦合起来的。Channel 是数据返回和过程执行完毕解耦的产物,这样做的灵活性增加了,但是后果就是错误传递也被打断了。
    为什么说这样设计是失误?Golang 为了解决错误传递,推出了 sync.errgroup。Golang 设计者正在慢慢偿还 Golang 的负债。
  4. Annotation (PS: Golang 反引号注解)
    Attribute (PS: 特性 (C#)) 已经送到你面前了,但是 Golang 就是不要,导致只能靠字符串。
    如果没有强大的 jetbrains IDE 的检查,不知道多少 bug 会额外诞生。
  5. 依赖系统 (被抛弃的 GOPATH)

Go 语言设计失误,缺乏远见?

微信公众号 “脑子进煎鱼了” 对上面观点的评论:Go 语言设计失误,缺乏远见?

  1. 关于泛型
  2. 关于错误处理
  3. 关于依赖管理
  4. 关于注解