LoginSignup
49
34
はじめての記事投稿

Go言語の例外処理がないってのは結局どういうこと?

Last updated at Posted at 2023-07-14

はじめに

はじめまして。インターンをしているイナです。
今回は初心者がGo言語の例外処理がないって本当なの?という部分について概念を中心に調べたものをまとめました。

Q. 例外処理とは

まずは兎にも角にも、例外処理とはなんぞやってところからです。
いくつかのサイトで例外処理の定義について調べてみましたが、サイトによって言ってることはバラバラでした。
例外とエラーは一緒です or 違います!例外は想定外 or 想定内&想定外のエラーのことです!など人によって言ってることが違いました。

最初から壁が高すぎ...?と戦々恐々としていましたが、IT用語辞典 e-Wordで気になる部分がありました。

例外は「エラー」(error)と同種の概念で、普遍的に成り立つ両者の明確な違いは無く、同義として扱われる場合が多い。ただし、プログラミング言語や処理系によっては両者に異なる意味合いが与えられている場合もある。

こちらの内容に関しては、まとめてくださっている方がいるので詳しくはそちらの記事をご覧になったほうが良いかと思います。
例外とエラーの違い

例外とエラーの違いに普遍的な概念がないために、例外処理も普遍的な概念が成り立たなくなっているみたいです。

A. 例外処理の概念はプログラミング言語によって違う

Q. Go言語の例外処理の扱い

じゃあGo言語での例外処理ってどういう扱いなんだ?というところですが、公式のドキュメンテーションにありました。

It also tends to encourage programmers to label too many ordinary errors, such as failing to open a file, as exceptional.

「プログラマーは通常のエラーも例外として分類する傾向がある」といった感じのことが前提として、述べられています。
実際に概念を調べていたときに、全てのエラーを例外としてる人もいたので納得です。
その上でGo at Google

The Java-like style of try-catch-finally blocks interlaces multiple overlapping flows of control that interact in complex ways.

Javaのようなtry-catch-finallyブロックのスタイルは、複雑な方法で相互作用する複数の重なり合った制御フローをインターレースする

Explicit error checking forces the programmer to think about errors—and deal with them—when they arise. Exceptions make it too easy to ignore them rather than handle them, passing the buck up the call stack until it is too late to fix the problem or diagnose it well.

明示的なエラー・チェックは、プログラマーにエラーについて考えさせ、エラーが発生したときに対処することを強いる。例外があると、問題を修正したり、うまく診断したりするのが手遅れになるまで、コールスタックの上に責任転嫁して、エラーに対処するのではなく、無視することがあまりにも簡単になる。

例外はできるだけ少ない方がよくて、エラーはできるだけ明示的な方がいいから、try-catch-finally形式の例外処理機構を用意してないと述べています。
ここからも分かる通り、Go言語では「意図しないエラー=例外」というふうに扱っています。

A. 例外(意図しないエラー)はできるだけ少ない方がよい

結論

Go言語の例外処理がないというのは「try-catch-finally形式の例外処理機構がない」ということです。

補足:Go言語の例外処理の方法

じゃあ、Go言語処理の例外処理ってどうするの?というところですが、簡単にまとめると

  • 通常のエラー
    • 関数はerrorを戻り値の最後に返すことを利用して処理する
  • 例外
    • panic/recoverなどを利用して処理する

といった感じです。ただ例外は少ない方がいいという観点から、基本はerrorを使うことをGo言語では推奨しています。
詳しくは公式ブログがあるので、そちらを見ていただくのがいいかと思います!

参考文献

この記事は以下の情報を参考にして執筆しました。

49
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
49
34