Memo: Efficient Go

2025/01/22に公開

Go言語を書いていて「なぜこの書き方を?」と悩むことが多いので読んでみた。

1. ソフトウェア効率性が重要

  • 効率性は速度やリソースの利用効率だけではなく、保守性や費用対効果といった包括的な概念
  • 性能指標を明確に定義して、誤解を防ぐことができる
  • 最適化と可読性は、ソフトウェア設計が適切であれば両立可能
  • 市場投入までのスピードと長期的な効率性のバランスを取ることは、ソフトウェアエンジニアにとって重要なスキル

Q. 性能とは何か?
精度、効率、速度の要素の組み合わせで表現される。
「性能」には様々な意味が含まれている可能性があるので、定義を明確にする。

Topic:「最適化されたコードは可読性がない」の誤解
最適化=可読性低下であると極端な結論に陥りがち。「早すぎる悲観化」で最適化を犠牲にしてはいけない。
最適化で可読性が低下するのはソフトウェア設計がそもそも間違っている。

感想

普段のプログラミングでは効率は二の次でまず動くことを求めてしまう。
もし速度が遅くなればマシンリソースをスケールさせれば良いからだ。
正直、効率化が後々の性能に効いてくるのは想像が難しいが、ソースコードの書き方の統一のために効率性の高い書き方を選択するのは生産性向上につながりそう。

2. 効率的なGo入門

  • Goの言語仕様は"less is more"のパターンに従って、シンプルに保たれている
  • 依存パッケージはデフォルトで公開されている(バイナリ化されていない)
  • エラー処理方法が統一されている
  • Goは他言語と比較して効率的なコードが書きやすくなっている

Q.テスト関数のFuzz_, Exampale_は何に使う?
Fuzzはランダムな値を生成して関数の引数等に設定して、関数の安定性などをテストする。Exampleはドキュメントとしての役割を持つサンプルコードを記述できる。

感想

Goが実行環境、シンプルに保つ思想、エコシステムなど総合的に効率的なソースコードが書きやすい言語であると理解した。

Discussion