Rumah >pembangunan bahagian belakang >Golang >Adakah Melepasi 'ini' mengikut Prestasi Kesan Nilai dalam Kaedah Go?

Adakah Melepasi 'ini' mengikut Prestasi Kesan Nilai dalam Kaedah Go?

Patricia Arquette
Patricia Arquetteasal
2024-12-19 17:27:10742semak imbas

Does Passing

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn