「this」を値で渡すと Go メソッドのパフォーマンスが低下しますか?
関数の引数に値を渡すとパフォーマンスが大幅に向上する可能性がある C とは異なります変数のコピーによるペナルティがあるため、Go のメソッド レシーバーは異なるパラダイムに従います。
メソッド レシーバーは単なる構文上の便宜です。以下に示すように:
type Something struct { Value int } func (s *Something) ChangeValue(n int) { s.Value = n } func main() { o := new(Something) fmt.Println(o.Value) // Prints 0 o.ChangeValue(8) // Changes o's value to 8 fmt.Println(o.Value) // Prints 8 (*Something).ChangeValue(o, 16) // Same as calling o.ChangeValue(16) fmt.Println(o.Value) // Prints 16 }
ChangeValue のレシーバー s はポインターであり、C の参照と似ていることに注意してください。レシーバーが値型の場合、値の変更は許可されません。
したがって、Go のポインター レシーバーのアプローチは、C/C で観察されるパフォーマンス上のペナルティとは異なり、カプセル化を保証し、「this」インスタンス全体のコピーを防ぎます。引数を値で渡すため。
以上が「this」を値で渡すことは Go メソッドのパフォーマンスに影響しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。