「Goはいいぞ」
世のエンジニアたちは軽々しくそう口にします。コンパイルが速い、並行処理が書きやすい、シンプルである。
なるほど、確かにその通りです。
しかし、彼らはGoの真の姿を理解していません。Goは単なるプログラミング言語ではありません。それは救済であり、魂の浄化プロセスなのです。
今日、東京の片隅で静かにGopher像に祈りを捧げながら、私はこの記事を執筆しています。Goがいかにして我々から無駄な自由意志を奪い、真の平穏をもたらすのか。その深淵なる魅力をお伝えしましょう。
1. 声明としての if err != nil
他の言語の信者は「Goはエラーハンドリングが冗長だ」と嘲笑します。愚かですね。
彼らは例外(Exception)に頼り、裏側で起きているエラーから目を背けています。Goにおいて、if err != nil をタイピングする行為は、決して単なるボイラープレートの記述ではありません。写経であり、マントラ(真言)の詠唱なのです。
res, err := DoSomething()
if err != nil {
return nil, err
}
ああ、なんて美しい響きでしょう。この3行をエディタに打ち込むたびに、我々の業は浄化されていきます。キーボードを叩く音が木魚の響きと共鳴し、我々は「今、ここでエラーと向き合っている」というマインドフルネスの境地に到達するのです。
2. 究極の自己否定、gofmt がもたらす涅槃
かつて世界は混沌に満ちていました。「インデントはタブかスペースか」「波括弧は改行するか」。愚かな人間たちは、己のちっぽけな「コーディングスタイル」という自我をぶつけ合い、血で血を洗う宗教戦争を繰り広げていました。
しかし、Goの創造主たちは我々に絶対的な法を下しました。それが gofmt です。
コードを保存した瞬間、個人のちっぽけなこだわりは、公式フォーマッタによって矯正されます。そこには個性の入り込む余地など一切ありません。
自我の完全なる消失です。
すべてを gofmt に委ねたとき、人は初めて「自分の書いたコードへの執着」から解き放たれ、深い悟りを得るのです。誰が書いても同じになる。つまり、我々は皆、一つになれるのです。
3. 使徒ロブ・パイクの教えと、未使用変数の大罪
Goのコンパイラは、使っていないパッケージや変数を絶対に許しません。Warningなどという生ぬるい警告ではなく、Compile Errorとして我々に「死」を与えます。
「あとで使うかもしれないから」
そんな未来への執着は、Goの世界では大罪です。「今、ここ」で使われていないものをコードに混入させることは、秩序を乱す行為に他なりません。使わない変数は消せ。今すぐ。Goコンパイラは、我々に断捨離とミニマリズムを叩き込んでくれます。
4. interface{} という大いなる混沌
我々には長らくGenericsという甘えが許されていませんでした(※近年、ついに導入されてしまいましたが)。
型がわからない? ならば interface{} を使いなさい。そして、実行時の型アサーションに己の魂を懸けなさい。
value, ok := unknownData.(string)
もしこれが失敗したとしても、それは神の意志です。我々はただif !ok の分岐を受け入れるのみ。あらゆるものを受け入れる interface{} は、すべてを包み込む母なる海のようでもありました。
おわりに
いかがでしょうか。
Goを書くということは、単なるシステム開発ではありません。己の欲を削ぎ落とし、ただひたすらにシンプルな構文を繰り返し記述することで、最終的にコーディングと宇宙が一体化する感覚を味わう修養なのです。
さあ、あなたもVS Codeに拡張機能を入れ、我々と一緒に詠唱しましょう。
if err != nil { return err }
if err != nil { return err }
if err != nil { return err }
……ようこそ、大いなるGoの導きへ。恐れることはありません。パニック(panic)にならない限り、我々はいつでもリカバー(recover)できるのですから。