Apabila cuba menambahkan hirisan tatasusunan dua bait dalam Go, ralat yang berkaitan dengan data yang tidak serasi mungkin berlaku jenis. Dalam kod yang disediakan, isu timbul apabila cuba menggunakan []bait sebagai argumen untuk fungsi append() variadic.
Spesifikasi Bahasa Pengaturcaraan Go mentakrifkan sintaks untuk append() sebagai:
append(s S, x ...T) S // T is the element type of S
Di sini, s ialah kepingan yang unsur-unsur sedang dilampirkan, dan x ialah senarai pelbagai unsur yang akan ditambahkan. Jenis T mesti sepadan dengan jenis elemen S.
Dalam kod contoh, satu dan dua adalah kedua-dua hirisan tatasusunan bait, jadi jenis elemennya ialah []bait. Walau bagaimanapun, hujah akhir dua[:] tidak diikuti oleh ..., yang bermaksud bahawa Go cuba untuk menganggapnya sebagai nilai []bait tunggal dan bukannya sekeping. Ini mengakibatkan ralat:
cannot use two[:] (type []uint8) as type uint8 in append
Untuk menyelesaikan ralat ini, anda perlu menggunakan ... selepas hujah kepingan terakhir untuk menunjukkan bahawa ia adalah kepingan variadic. Kod yang diperbetulkan ialah:
package main import "fmt" func main() { one := make([]byte, 2) two := make([]byte, 2) ... fmt.Println(append(one[:], two[:]...)) ... }
Dengan mengikut sintaks ini, Go akan menambah elemen dua[:] dengan betul menjadi satu[:].
Atas ialah kandungan terperinci Mengapa Menambah Tatasusunan Slice Byte dalam Go Menghasilkan Ralat Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!