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

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

DDD
Lepaskan: 2024-12-27 05:10:14
asal
601 orang telah melayarinya

How Can I Modify a Slice Passed as a Function Argument in Go?

Melalukan Slice sebagai Argumen Fungsi dan Mengubah Suai Slice Asal

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}
Salin selepas log masuk

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)
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan