
最近、プロジェクトの関係でGoのコードを書く必要がありました。私はこれまでにTypeScriptとKotlinという、多くのシンタックスシュガーを含んだ言語を使用してきましたので、Goには最初は非常に適応できませんでした。最初はGoのさまざまな不足を嫌っており、Go2にはジェネリックスが含まれていることを期待していました。しかし、使用が深まるにつれて、Goのさまざまな設計の意図を徐々に理解するようになりました。
- 明示的なエラーを返すことによって。
開発者には、このエラーの原因や処理の必要性について考えさせることが求められます。
- ポインタ型と値型を厳密に区別する。
開発者には、どのタイプを選択するかとそれに伴うリスクを考えることを強制します。
- より良いソースコードの読みやすさ。
オブジェクト指向型の言語(例:Java)は、厳密な型階層を持ち、ソースコードの実装を見るためには、一つ一つのレイヤーを辿る必要があります。その根本的な原因は、継承が緊密に結合していることであり、開発者が大量に継承を使用していることです。
Goでは、継承の代わりに組み合わせをほぼ強制的に使用し、コードをできるだけ簡潔に保つようにしています。
- ジェネリックを提供しないことで、書きやすいが読みにくいコードを作成することを防ぎます。
コードは一度だけ書かれますが、何度も読まれます。ジェネリックな関数は、ソースコードの理解のハードルを高めることは間違いありません。
ジェネリック関数はしばしば関連性のない多くのコードから呼び出されますが、そのうちの1つの呼び出しの要件が変更されると、ジェネリック関数を再理解して新しい関数を書き直す必要があります。これにより、より深刻なコードの重複が発生する可能性があります。
- Goの高い制約性は、開発者が最小限の心理的負担で開発できるようにします。