Adakah Melepasi "ini" mengikut Nilai Merendahkan Prestasi dalam Kaedah Go?
Tidak seperti C di mana argumen fungsi lulus nilai boleh menghasilkan prestasi yang ketara penalti akibat penyalinan berubah-ubah, penerima kaedah Go mengikut paradigma yang berbeza.
Dalam Go, penerima kaedah hanyalah kemudahan sintaksis. Seperti yang ditunjukkan di bawah:
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 }
Perhatikan bahawa penerima dalam ChangeValue ialah penunjuk, menjadikannya serupa dengan rujukan dalam C . Jika penerima ialah jenis nilai, ia tidak akan membenarkan mutasi nilai.
Oleh itu, pendekatan penerima penunjuk Go memastikan pengkapsulan dan menghalang penyalinan keseluruhan contoh "ini", tidak seperti penalti prestasi yang diperhatikan dalam C/C untuk menghantar hujah mengikut nilai.
Atas ialah kandungan terperinci Adakah Melepasi 'ini' mengikut Prestasi Kesan Nilai dalam Kaedah Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!