レシーバの選び方
CoddyのGOジャーニー「論理とフロー」セクションの一部 — レッスン 9/68。
値レシーバとポインタレシーバの両方を理解したところで、重要な疑問は「いつどちらを使うべきか」ということです。その判断は、メソッドがレシーバに対して何を行う必要があるかによって決まります。
メソッドが元の構造体を変更する必要がある場合は、ポインタレシーバを使用してください。ポインタレシーバは実際の構造体インスタンスを操作するため、メソッド内で行われた変更はメソッドの終了後も保持されます。これは、フィールドの更新、状態の変更、または元のデータに影響を与えるべき操作を実行するメソッドにとって不可欠です。
メソッドが構造体を変更せずにデータを読み取るだけでよい場合は、値レシーバを使用してください。値レシーバはコピーを操作するため、値の計算、出力のフォーマット、または元の構造体を変更する必要のない操作を実行するメソッドに最適です。また、元のデータが変更されないことを保証することで、安全性も提供します。
一般的なルールとして:メソッドが struct を変更する場合は、pointer receiver を使用してください。メソッドが struct から読み取りのみを行う場合は、value receiver を使用してください。このアプローチにより、コードの意図が明確になり、データへの意図しない変更を防ぐのに役立ちます。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
チートシート
メソッドが元の構造体を変更する必要がある場合は、ポインタレシーバを使用します:
- メソッド内で行われた変更は、メソッドの終了後も保持されます
- フィールドを更新したり状態を変更したりするメソッドには不可欠です
メソッドが構造体からデータを読み取るだけでよい場合は、値レシーバを使用します:
- コピーを操作するため、元のデータは変更されません
- 値を計算したり出力をフォーマットしたりするメソッドに最適です
- 意図しない変更が行われないことを保証し、安全性を提供します
一般的なルール: メソッドが構造体を変更する場合はポインタレシーバを使用し、構造体から読み取るだけの場合は値レシーバを使用します。
自分で試してみよう
このレッスンにはコードチャレンジは含まれていません。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。