Melalukan Slices sebagai Argumen dengan Pengubahsuaian Slice Asal
Melalui pembolehubah mengikut nilai dalam Go mengehadkan kesan pengubahsuaian fungsi kepada skop fungsi. Dalam kes di mana hirisan perlu diubah suai di luar fungsi, menghantar hirisan terus sebagai hujah adalah tidak mencukupi.
Gelagat Fungsi Penambahan Slice
Fungsi tambah memperuntukkan kepingan baharu dan menyalin unsur daripada kepingan sedia ada, termasuk sebarang tambahan yang dibuat dalam fungsi. Walau bagaimanapun, kepingan asal kekal tidak terjejas.
Contoh: Rekursi pada Slice Terkumpul
Coretan kod yang disediakan pada mulanya cuba mengumpul mesej pengesahan dalam kepingan yang diluluskan sebagai hujah kepada fungsi rekursif. Walau bagaimanapun, pengubahsuaian fungsi tidak ditunjukkan dalam kepingan asal.
Penyelesaian
Terdapat dua penyelesaian utama untuk isu ini:
func myAppend(list *[]string, value string) { *list = append(*list, value) }
func validate(obj Validatable, messages []ValidationMessage) []ValidationMessage { //...Processing return messages }
Pendekatan Idiomatik Go
Melalukan penunjuk kepada kepingan ialah pendekatan Go idiomatik apabila fungsi perlu mengubah suai kepingan asal. Seperti yang ditunjukkan dalam pendekatan kepingan kembali, ia juga mungkin untuk memintas keperluan untuk penumpuk dengan mengembalikan kepingan yang diubah suai.
Pertimbangan Prestasi
Impak prestasi lulus a penunjuk berbanding mengembalikan kepingan boleh diabaikan dalam kebanyakan senario. Walau bagaimanapun, tingkah laku yang tepat mungkin berbeza-beza bergantung pada pengoptimuman pengkompil dan penggunaan kod tertentu.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengubah Suai Slice yang Diluluskan sebagai Hujah dalam Fungsi Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!