Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengubah Suai Slice dalam Fungsi Go Tanpa Menjejaskan Yang Asal?

Bagaimanakah Saya Boleh Mengubah Suai Slice dalam Fungsi Go Tanpa Menjejaskan Yang Asal?

Susan Sarandon
Susan Sarandonasal
2024-12-21 00:15:17599semak imbas

How Can I Modify a Slice in a Go Function Without Affecting the Original?

Ubah suai Slice yang Dilalui kepada Fungsi

Dalam Go, parameter dihantar mengikut nilai, yang bermaksud bahawa perubahan dibuat kepada kepingan dalam fungsi tidak menjejaskan kepingan asal. Ini boleh menimbulkan masalah apabila menggunakan fungsi rekursif, di mana anda ingin mengubah suai hirisan penumpuk.

Melalukan Penunjuk ke Slice

Untuk mengubah suai kepingan asal, anda boleh menghantar penunjuk ke kepingan sebagai parameter fungsi. Ini membenarkan fungsi untuk mengubah suai hirisan asal melalui penuding.

Contohnya:

func myAppend(list *[]string, value string) {
    *list = append(*list, value)
}

Penyelesaian Kemas Kini

Daripada menghantar penuding kepada kepingan, anda boleh mengembalikan kepingan yang diubah suai daripada fungsi rekursif. Ini membenarkan fungsi untuk mengumpul nilai dalam hirisan dan mengembalikan hasil akhir kepada pemanggil.

func validate(obj Validatable, messages []ValidationMessage) ([]ValidationMessage, error) {
    // ...

    return validate(v, messages)
}

Pendekatan Idiomatik

Melalukan penunjuk ke hirisan atau mengembalikan kepingan yang diubah suai adalah kedua-dua pendekatan idiomatik dalam Go. Pilihan pendekatan yang hendak digunakan bergantung pada keperluan khusus fungsi anda.

Nota:

Apabila menggunakan penunjuk untuk mengubah suai kepingan, adalah penting untuk memastikan bahawa penunjuk tidak sifar dan kepingan itu tidak diubah suai secara serentak.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengubah Suai Slice dalam Fungsi Go Tanpa Menjejaskan Yang Asal?. 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