Memahami Lulus Melalui Rujukan dan Nilai dalam Fungsi Go
Dalam Go, konsep lulus melalui rujukan dan nilai boleh mengelirukan pada mulanya. Untuk menjelaskannya, perlu diperhatikan bahawa Go terutamanya menyokong nilai lulus. Walau bagaimanapun, apabila menghantar penuding kepada objek, ia meniru melalui rujukan.
Untuk memahami perkara ini, pertimbangkan fungsi Java berikut:
databaseFunction(DatabaseType db) { // do something }
Dalam kod ini, contoh DatabaseType db ialah dihantar ke fungsi dengan nilai. Walau bagaimanapun, dalam Go, ia mungkin diwakili sebagai:
func PutTasks(db *sql.DB) echo.HandlerFunc { }
Dalam contoh Go, asterisk * sebelum sql.DB membayangkan bahawa fungsi tersebut menjangkakan penunjuk kepada contoh sql.DB. Ini kerana dalam Go, nilai jenis penuding memegang alamat.
Menurut helaian tipu yang anda nyatakan, fungsi sintaks PrintPerson(p *Orang) menunjukkan bahawa fungsi itu hanya menerima alamat penuding kepada objek Orang. Sebab untuk menggunakan penuding di sini adalah untuk membolehkan fungsi mengubah suai objek asal yang dihantar masuk.
Untuk menunjukkan lebih lanjut, pertimbangkan kod Go berikut:
func someFunc(x *int) { *x = 2 // Whatever variable caller passed in will now be 2 y := 7 x = &y // has no impact on the caller because we overwrote the pointer value! }
Dalam contoh ini , x ialah penunjuk kepada integer. Dengan membatalkan rujukannya, kami boleh mengubah suai secara langsung nilai yang ditunjukkannya. Walau bagaimanapun, menetapkan semula x untuk menunjuk kepada pembolehubah yang berbeza tidak memberi kesan kepada pemanggil kerana mereka hanya mempunyai salinan pembolehubah penunjuk, bukan nilai yang ditunjuk pada asalnya.
Oleh itu, menggunakan penunjuk menyediakan mekanisme untuk berkongsi nilai antara pemanggil dan fungsi, membenarkan perubahan yang dibuat dalam fungsi dipantulkan kembali kepada objek asal.
Atas ialah kandungan terperinci Bagaimanakah Mekanisme Nilai Laluan Go Meniru Rujukan Laluan Menggunakan Penunjuk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!