Lulus Slices dengan Berkesan dalam Go: Elakkan Had Nilai Lulus
Dalam Go, menghantar kepingan sebagai hujah fungsi pada asasnya dilakukan mengikut nilai. Ini menunjukkan bahawa jika kepingan argumen diubah suai dalam fungsi menggunakan append, ia tidak akan menjejaskan kepingan asal di luar skop fungsi.
Untuk menggambarkan pengehadan ini, 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, nombor kepingan asal kekal tidak terjejas walaupun terdapat pengubahsuaian dalam fungsi addToNumbs. Untuk menyelesaikan isu ini, seseorang boleh menghantar penuding kepada kepingan sebaliknya:
func myAppend(list *[]string, value string) { *list = append(*list, value) }
Pendekatan ini memastikan bahawa kepingan asal diubah suai secara langsung.
Sebagai alternatif, dalam senario tertentu, hanya mengembalikan kepingan yang diubah suai daripada fungsi boleh menjadi penyelesaian yang cekap:
func validate(obj Validatable, messages []ValidationMessage) ([]ValidationMessage, error) { // Modification... return messages, nil }
Ringkasnya, apabila menghantar kepingan sebagai hujah dalam Go, adalah penting untuk mempertimbangkan sama ada pengubahsuaian dalam fungsi harus memberi kesan kepada kepingan asal. Jika ya, menggunakan penuding pada kepingan atau mengembalikan kepingan yang diubah suai merupakan pendekatan yang berkesan untuk mencapai tingkah laku yang diingini.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengubah Suai Secara Berkesan Slice yang Diluluskan sebagai Argumen dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!