Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menambah Slices Byte dan Array dengan Betul dalam Go?

Bagaimana untuk Menambah Slices Byte dan Array dengan Betul dalam Go?

Susan Sarandon
Lepaskan: 2024-12-08 18:04:13
asal
716 orang telah melayarinya

How to Correctly Append Byte Slices and Arrays in Go?

Menambahkan Kepingan dan Tatasusunan Byte dalam Go: Penyelesaian Masalah dan Penyelesaian

Dalam Go, menambahkan hirisan tatasusunan dua bait boleh membawa kepada ralat yang tidak dijangka. Pertimbangkan kod berikut:

one := make([]byte, 2)
two := make([]byte, 2)
one[0] = 0x00
one[1] = 0x01
two[0] = 0x02
two[1] = 0x03

log.Printf("%X", append(one[:], two[:]))

three := []byte{0, 1}
four := []byte{2, 3}

five := append(three, four)
Salin selepas log masuk

Kod ini menghasilkan ralat berikut:

cannot use four (type []uint8) as type uint8 in append
cannot use two[:] (type []uint8) as type uint8 in append
Salin selepas log masuk

Bertentangan dengan reputasi Go untuk kepingan teguh, ralat ini nampaknya tidak dapat dijelaskan. Untuk memahami dan menyelesaikan isu ini, kita perlu menyelidiki Spesifikasi Bahasa Pengaturcaraan Go.

Memahami Spesifikasi

Menurut Spesifikasi Go, fungsi append mengambil masa kepingan s jenis S dan sifar atau lebih nilai x jenis T, dengan T ialah jenis unsur S. Hasilnya ialah kepingan baharu jenis S dengan unsur s diikuti dengan unsur-unsur x.

Yang penting, untuk hujah terakhir, jika ia boleh diserahkan kepada jenis hirisan []T, ia boleh dihantar tidak berubah sebagai nilai untuk parameter ...T jika diikuti dengan ....

Mengatasi Ralat

Dalam kod yang disediakan, hujah akhir untuk ditambahkan tidak diikuti dengan .... Untuk menyelesaikan ini, kita perlu menyatakan []T... secara eksplisit untuk hujah terakhir. Dalam kes kami, T ialah bait, jadi kodnya hendaklah:

fmt.Println(append(one[:], two[:]...))
Salin selepas log masuk

Untuk contoh kedua, kita harus membuat pengubahsuaian yang serupa:

five := append(three, four...)
Salin selepas log masuk

Nota Tambahan

  • Pengendali ... dalam Go membolehkan kami menghantar sekeping sebagai variasi hujah.
  • Apabila menambahkan kepingan dengan panjang yang berbeza, kepingan yang terhasil akan mempunyai panjang yang sama dengan jumlah panjang kepingan input.
  • Sintaks []T... juga digunakan apabila kita ingin memulakan hirisan dengan senarai variadik elemen.

Kesimpulan

Dengan memahami nuansa fungsi tambah dan garis panduan Spesifikasi Go untuk argumen variadic, kami boleh menambahkan tatasusunan bait dengan berkesan dalam Go dan elakkan ralat yang ditemui dalam kod asal.

Atas ialah kandungan terperinci Bagaimana untuk Menambah Slices Byte dan Array dengan Betul 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan