2017-07-20 4 views
1

私はポインタまたは値方式の受信機を使用して再FAQを読んでいると、それは言う:なぜメソッド受信者は一貫性がなければならないのですか?

次は一貫性です。タイプのメソッドの中には のポインタレシーバが必要な場合は残りのタイプもあるはずなので、タイプの使用方法に関係なく、メソッドセットは となります。

なぜこれが重要ですか?確かにデータを読み取るためのいくつかの方法がある場合、受信者に破壊的な変更を加えないように、値の受信者を使用したいと考えています。このアドバイスは、レシーバー上のデータを変更する単一のメソッドを作成すると、すべてのメソッドを変更してポインター受信機を使用する必要があることを示しています。

誰かがこのアドバイスの背後にある理由を説明できますか?仕事に適切なツールを使用すると何が問題になりますか?

答えて

0

この見積もりの​​要点は、method set consistencyです。タイプTと* Tは、Goでは異なるタイプであり、異なるメソッドセットを持つことができます(説明はFAQにもあります)。

重要な理由の1つは、インタフェースの満足度がGoに暗黙的に含まれているためです。だからあなたの型のメソッドのいくつかがポインタ受信機を持っている場合、他の人はそうではない間に、あなたのオブジェクトがインタフェースを満足すると思ったときに状況になるかもしれませんが、ポインタや値を使用しているかどうかによって異なります。

このような混乱を避けることは良い習慣です。

+0

コンパイラは暗黙的にポインタとして値を受け入れるので、書き込みが失われるタイミングを知ることができません。しかし、私はちょうど受信機を誤って変更してしまったので、これがどのように役立つのか分かりません。 – jbrown

+0

私のポイント –

+0

の[example](https://play.golang.org/p/lh9Pn0Ik-J)です。私はかなり新しいです。私は問題を見ることができますが、良い選択肢は何でしょうか?一貫性はどのように役立つでしょうか? – jbrown

関連する問題