はじめに
こちらの要約とポイントをまとめておこうと思います。
https://itnext.io/golang-to-point-or-not-to-point-79b64e56a1bb
要約と説明
この記事は、Go言語でのポインタの使用に関する議論を取り上げています。ポインタには多くの利点がありますが、注意深く使用しないとコードを壊す原因となることもあります。
ポインタを使用するかどうかの決定の難しさや、ポインタのパフォーマンスに関する懸念、スタックとヒープの違いなどについても触れています。以下は、記事の主なポイントをまとめたものです。
- ポインタの利点と欠点: ポインタは多くの利点がありますが、注意深く使用しないと予期しない動作を引き起こすことがあります。
- 値の渡し方: Goはすべてのものを値として渡します。ポインタも関数に渡す際にコピーされますが、同じ基本メモリを表しているため、基本値を変更することができます。
- パフォーマンス: ポインタを使用することでパフォーマンスが向上するとは限らない。実際には、非常に大きな構造体のみがポインタと比較して遅いパフォーマンスを引き起こす可能性があります。
- スタックとヒープ: スタックはアクセスが高速で、ヒープはガベージコレクタによって管理されるため、一定の遅延が発生することがあります。
- ポインタの選択: ポインタを使用するかどうかの決定は、コードの可読性や簡潔さに基づいて行うべきです。
要約
ポインタの使用に関する決定は、パフォーマンスやコードの複雑さを考慮して慎重に行う必要があります。パフォーマンスの問題が確認された場合、まずベンチマークでそれを証明する必要があります。ポインタの不適切な使用は、パフォーマンスの低下や不要な複雑さを引き起こす可能性があります。
[参考リンク]
The Stack and the Heap — GopherCon SG 2019
runtime: don’t allocate for non-escaping conversions to interface{}
fmt.Println causes memory escape