Ubah suai Slice yang Dilalui kepada Fungsi
Dalam Go, parameter dihantar mengikut nilai, yang bermaksud bahawa perubahan dibuat kepada kepingan dalam fungsi tidak menjejaskan kepingan asal. Ini boleh menimbulkan masalah apabila menggunakan fungsi rekursif, di mana anda ingin mengubah suai hirisan penumpuk.
Melalukan Penunjuk ke Slice
Untuk mengubah suai kepingan asal, anda boleh menghantar penunjuk ke kepingan sebagai parameter fungsi. Ini membenarkan fungsi untuk mengubah suai hirisan asal melalui penuding.
Contohnya:
func myAppend(list *[]string, value string) { *list = append(*list, value) }
Penyelesaian Kemas Kini
Daripada menghantar penuding kepada kepingan, anda boleh mengembalikan kepingan yang diubah suai daripada fungsi rekursif. Ini membenarkan fungsi untuk mengumpul nilai dalam hirisan dan mengembalikan hasil akhir kepada pemanggil.
func validate(obj Validatable, messages []ValidationMessage) ([]ValidationMessage, error) { // ... return validate(v, messages) }
Pendekatan Idiomatik
Melalukan penunjuk ke hirisan atau mengembalikan kepingan yang diubah suai adalah kedua-dua pendekatan idiomatik dalam Go. Pilihan pendekatan yang hendak digunakan bergantung pada keperluan khusus fungsi anda.
Nota:
Apabila menggunakan penunjuk untuk mengubah suai kepingan, adalah penting untuk memastikan bahawa penunjuk tidak sifar dan kepingan itu tidak diubah suai secara serentak.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengubah Suai Slice dalam Fungsi Go Tanpa Menjejaskan Yang Asal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!