構造体リテラルの代わりにポインタを使用すると、次の場合に役立ちます。
- 構造体が大きく、あなたはそれを回します
- あなたはそれを共有したい、つまり、すべての変更はコピーに影響を与えるのではなく、構造体に影響を与えるということです
それ以外の場合は、構造体リテラルを使用するだけで問題ありません。int
小さな構造体の場合、または:を使用するのと同じように質問について考えることができます*int
。ほとんどの場合、intは問題ありませんが、レシーバーがint変数を変更できるようにポインターを渡すこともあります。
リンク先のGoツアーの演習では、頂点構造体は小さく、他の数値とほぼ同じセマンティクスを持っています。私の意見では、それを構造体として直接使用し、次のように#53Scaled
で関数を定義することは問題ありませんでした:
func (v Vertex) Scaled(f float64) Vertex {
v.X = v.X * f
v.Y = v.Y * f
return v
}
持っているので
v2 := v1.Scaled(5)
のように新しい頂点を作成します
var f2 float32 = f1 * 5
新しいを作成しfloat
ます。
これは、標準の構造体(ここでTime
定義)の処理方法に似ています。これは通常、ではなく型の変数に保持されます。Time
*Time
しかし、明確なルールはなく、用途によっては、との両方Scale
を維持できたはずScaled
です。