パラメータと戻り値のポインタと値
Goでは、struct値またはそのスライスを返すさまざまな方法があります。私が見た個々のものについて: type MyStruct struct { Val int } func myfunc() MyStruct { return MyStruct{Val: 1} } func myfunc() *MyStruct { return &MyStruct{} } func myfunc(s *MyStruct) { s.Val = 1 } これらの違いを理解しています。1つ目は構造体のコピーを返し、2つ目は関数内で作成された構造体値へのポインタ、3つ目は既存の構造体が渡されることを期待して値をオーバーライドします。 これらのパターンのすべてがさまざまなコンテキストで使用されるのを見てきましたが、これらに関するベストプラクティスは何なのでしょうか。どちらを使用しますか?たとえば、最初のものは小さな構造体で問題がなく(オーバーヘッドが最小限であるため)、2つ目はより大きな構造体で問題ありません。また、呼び出し間で単一の構造体インスタンスを簡単に再利用できるため、非常にメモリ効率を高めたい場合は3番目。どれを使用するかについてのベストプラクティスはありますか? 同様に、スライスに関する同じ質問: func myfunc() []MyStruct { return []MyStruct{ MyStruct{Val: 1} } } func myfunc() []*MyStruct { return []MyStruct{ …