Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengubah Suai Slice yang Diluluskan sebagai Argumen Fungsi dalam Go?
Dalam Go, menghantar argumen kepada fungsi dilakukan mengikut nilai, bermakna sebarang perubahan yang dibuat pada argumen dalam fungsi tidak ditunjukkan dalam pembolehubah asal. Ini boleh menjadi masalah apabila bekerja dengan jenis data boleh ubah seperti hirisan, kerana penambahan pada hirisan dalam fungsi tidak akan menjejaskan hirisan asal di luar skop fungsi.
Pertimbangkan contoh berikut:
nums := []int{1, 2, 3} func addToNumbs(nums []int) []int { nums = append(nums, 4) fmt.Println(nums) // []int{1, 2, 3, 4} } fmt.Println(nums) // []int{1, 2, 3}
Dalam contoh ini, fungsi AddToNumbs mengambil salinan kepingan nums dan menambahkan nilai 4. Ini hanya mengubah suai salinan dalam fungsi dan hirisan nums asal kekal tidak berubah di luar fungsi.
Untuk menyelesaikan isu ini, anda perlu menghantar hirisan melalui rujukan. Satu cara untuk melakukan ini ialah dengan menghantar penuding ke hirisan:
func myAppend(list *[]string, value string) { *list = append(*list, value) }
Dengan menghantar penuding ke hirisan, sebarang perubahan yang dibuat dalam fungsi akan dicerminkan secara langsung dalam kepingan asal. Walau bagaimanapun, menghantar penunjuk juga bermakna bahawa fungsi boleh mengubah suai hirisan dalam cara yang anda mungkin tidak jangkakan, jadi adalah penting untuk menggunakan penunjuk dengan berhati-hati.
Alternatif lain ialah mengembalikan kepingan yang diubah suai daripada fungsi, seperti yang ditunjukkan dalam contoh berikut:
func validate(obj Validatable, messages []ValidationMessage) []ValidationMessage { // Append to the accumulator and return it directly messages = append(messages, message) return messages }
Dalam kes ini, fungsi pengesahan mengembalikan kepingan mesej yang diubah suai, menghapuskan keperluan untuk menghantar penuding kepada hiris.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengubah Suai Slice yang Diluluskan sebagai Argumen Fungsi dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!