C++ や Java のような言語圏から来た(私のような)人間にとって Go 言語の「オブジェクト指向」はかなり異質なのだが,慣れてみると逆にとても合理的に見えてくる。 なんで C++ や Java はこのようなアプローチをとらなかったのか不思議なほどである。 この最たるものがエラー・ハンドリングだ。 Go 言語には「例外」がない 「例外(exception)」は本来の処理の流れをぶった切って「大域脱出」するための仕組みである。 でも考えてみれば例外というのはかなり微妙な言語仕様だ。 例外が抱える問題というのは本質的に goto 文の問題と同じ1。 オブジェクトの状態ごと脱出するため,(脱出前ではなく)脱出後にオブジェクトの後始末を記述せざるを得ないし,記述するためには脱出前の状態(の可能性)を「知識」として知っていなければならない2。 もし後始末をきちんとしないと,それがバグやリークやそ
![エラー・ハンドリングについて(追記あり)](https://cdn-ak-scissors.b.st-hatena.com/image/square/d10addccef9c7773072a5ec748deb629e26bc669/height=288;version=1;width=512/https%3A%2F%2Ftext.baldanders.info%2Fimages%2Fattention%2Fgo-logo_blue.png)