如何设计错误处理

ToC

先总结

看看大家是怎么做的

C

#define ERROR_PERMISSION 13

Java

throw RuntimeException("坏了!");

try { ... } catch( .. ) { ... } finally { ... }

Go

type error interface {
	Error() string
}

Rust

enum Result<T, E> {
  Ok(T),
  Err(E),
}

再总结

在开篇提出的几个要求下,结合列举出的一些我比较熟悉的语言(也差不多是一系列错误风格的代表语言),观察来下,只有 Rust 能尽量满足了这些要求。

我经常吐槽 Go 的错误设计不行,但好像从来没怎么仔细想过一个语言合理的错误设计应该是怎么样的(虽然之前有研究过业务 API 的错误处理,它们可能有些不一样)。

面试中被提到了这个问题,我只回答上了 语法上要精炼 这一个想法(<- 被 Go 折磨导致的),最后交谈后,才知道原来这些我习以为常的东西,也是一个错误处理该有的设计。