Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengubah Suai Secara Berkesan Slice yang Diluluskan sebagai Argumen dalam Go?

Bagaimanakah Saya Boleh Mengubah Suai Secara Berkesan Slice yang Diluluskan sebagai Argumen dalam Go?

Patricia Arquette
Patricia Arquetteasal
2024-12-30 18:06:19179semak imbas

How Can I Effectively Modify Slices Passed as Arguments in Go?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn