In Go, kepingan dan peta berkongsi sifat sebagai jenis rujukan. Walau bagaimanapun, tingkah laku mereka berbeza apabila ia melibatkan penambahan elemen baharu dalam parameter. Walaupun elemen baharu yang ditambahkan pada peta ditunjukkan secara automatik dalam hujah, unsur baharu yang ditambahkan pada kepingan akan "dibuang" dalam hujah.
Percanggahan ini berpunca daripada cara jenis ini dilaksanakan. Peta dilaksanakan sebagai penunjuk kepada struktur data peta cincang dalaman. Apabila elemen baharu ditambahkan pada peta, struktur data peta cincang dikemas kini, tetapi penunjuk asas kekal tidak berubah. Ini memastikan bahawa semua rujukan kepada peta menghala ke struktur data asas yang sama.
Sebaliknya, keping dilaksanakan sebagai struct yang menyimpan penuding kepada tatasusunan sandaran, bersama-sama dengan panjang dan kapasiti kepingan. Apabila elemen baharu ditambahkan pada kepingan, pengepala kepingan baharu perlu dibuat dengan panjang dikemas kini dan berpotensi tatasusunan sandaran baharu jika perlu. Pengepala kepingan baharu ini diberikan kepada pembolehubah yang menunjuk kepadanya, tetapi pengepala kepingan asal kekal tidak berubah.
Satu lagi faktor yang menyumbang kepada gelagat yang diperhatikan ialah nilai lulus demi-demi-Go semantik. Apabila peta dihantar ke fungsi, fungsi menerima salinan penuding peta. Sebarang pengubahsuaian yang dibuat pada peta melalui salinan ini juga akan menjejaskan peta asal kerana kedua-duanya menunjuk kepada struktur data asas yang sama.
Apabila hirisan dihantar ke fungsi, fungsi menerima salinan pengepala hirisan . Pengubahsuaian pada kepingan akan mencipta pengepala kepingan baharu dengan panjang dan kapasiti yang dikemas kini, tetapi pengepala kepingan asal tidak akan terjejas. Akibatnya, hujah tidak akan melihat perubahan yang dibuat dalam fungsi.
Gelagat hirisan dan peta yang berbeza dalam konteks ini boleh membawa kepada potensi perangkap untuk pembangun, terutamanya yang baru mengenali Go. API untuk jenis rujukan ini kelihatan tidak konsisten, kerana seseorang berkelakuan seperti yang diharapkan untuk pengubahsuaian nilai tetapi yang lain tidak.
Untuk mencapai konsistensi dalam gelagat API, seseorang boleh membuat kepingan berkelakuan seperti penunjuk kepada struktur data asas, serupa dengan peta. Walau bagaimanapun, pendekatan ini jarang digunakan dan tidak mempunyai sokongan bahasa. Sebaliknya, amalan biasa ialah mengembalikan kepingan baharu apabila menambah elemen. Ini memastikan bahawa pemanggil menerima versi hirisan yang dikemas kini.
Atas ialah kandungan terperinci Mengapa Slice dan Peta Go Berperilaku Berbeza Apabila Menambah Elemen sebagai Parameter Fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!