Memahami Gelagat Slice dalam Go: Mengapa Menambah Mengubah Slice Asal?
Dalam coretan kod yang disediakan, kami mempunyai fungsi someFunc yang beroperasi pada sekeping integer. Di dalam fungsi, tempA hirisan sementara dicipta dan diberikan nilai hirisan input A. Walau bagaimanapun, apabila dilampirkan pada tempA, A asal juga diubah suai. Tingkah laku ini mungkin kelihatan berlawanan dengan intuisi, jadi mari kita terokai sebab ia berlaku.
Dalam Go, kepingan diisytiharkan sebagai jenis data []T, dengan T mewakili jenis elemen. Walaupun namanya, hirisan bukanlah koleksi elemen yang disimpan bersebelahan dalam ingatan. Sebaliknya, ia ialah struktur pengepala yang mengandungi maklumat berikut:
Apabila anda tetapkan nilai pembolehubah hirisan, anda tidak menyalin keseluruhan tatasusunan. Sebaliknya, anda sedang mencipta pengepala kepingan baharu yang menunjuk kepada tatasusunan asas yang sama. Oleh itu, apabila anda melakukan operasi seperti menambahkan tempA, anda juga mengubah suai tatasusunan asas dan, akibatnya, nilai dalam kepingan asal A.
Tingkah laku ini penting untuk memastikan pengurusan memori yang cekap dan mengelakkan perkara yang tidak perlu. meniru. Dengan menggunakan pendekatan berasaskan penunjuk, kepingan Go boleh berkongsi tatasusunan asas yang sama sambil mengekalkan nilai panjang dan kapasiti yang berasingan. Ini membolehkan pengubahsuaian ringan pada kepingan tanpa memerlukan operasi penyalinan yang mahal.
Untuk pemahaman yang lebih mendalam tentang gelagat kepingan dan struktur data asas, rujuk sumber berikut: https://blog.golang.org/ hirisan
Atas ialah kandungan terperinci Mengapa Melampirkan pada Salinan Go Slice Mengubah Yang Asal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!