Rumah >pembangunan bahagian belakang >Golang >Kaedah Go: Penerima vs. Parameter: Apakah Perbezaannya?
Pengikatan Kaedah dalam Go: Memahami Parameter lwn. Penerima
Dalam Go, kaedah berkait rapat dengan jenis. Apabila mentakrifkan kaedah untuk jenis, anda boleh menentukan sama ada ia harus dilampirkan terus kepada jenis atau diluluskan sebagai hujah. Konsep ini, yang dikenali sebagai pengikatan kaedah, adalah penting untuk memahami model pengaturcaraan Go.
Pertimbangkan tandatangan kaedah berikut:
func (p *Page) save() error { // ... }
Di sini, p ialah penerima, yang merupakan jenis khas parameter. Dalam Go, penerima sentiasa menjadi parameter pertama bagi sesuatu kaedah, dan ia secara eksplisit mengenal pasti jenis kaedah yang dilampirkan. Dalam kes ini, simpan dilampirkan pada jenis *Halaman, yang mewakili penunjuk kepada struct Halaman.
Penerima membenarkan kaedah untuk mengakses data tika objek penerima. Apabila kaedah digunakan, penerima secara automatik terikat kepada contoh asas. Pengikatan ini telus kepada pemanggil, tetapi ia memberikan kaedah akses kepada medan dan kaedah tika.
Sebaliknya, parameter biasa dihantar sebagai nilai, bermakna ia adalah salinan data sebenar. Ia tidak boleh digunakan untuk mengakses atau mengubah suai data tika pemanggil.
Untuk menjelaskan lagi perbezaan antara penerima dan parameter, pertimbangkan kod berikut:
var p = new(Page) p.save() (*Page).save(p)
Kedua-dua baris terakhir mewakili dengan tepat panggilan kaedah yang sama, menunjukkan bahawa penerima hanyalah satu bentuk parameter khas yang terikat pada contoh yang diwakili oleh penerima nilai.
Kesimpulannya, penerima dalam tandatangan kaedah Go ialah jenis parameter khas yang mengikat kaedah kepada jenis contoh yang digunakan. Ini membenarkan kaedah untuk mengakses dan memanipulasi data tika, manakala parameter dihantar sebagai nilai dan tidak boleh mengubah suai tika pemanggil. Memahami perbezaan ini adalah penting untuk penggunaan kaedah yang berkesan dalam Go.
Atas ialah kandungan terperinci Kaedah Go: Penerima vs. Parameter: Apakah Perbezaannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!