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
Susan Sarandonasal
2024-12-08 18:04:13714semak imbas

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)

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

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[:]...))

Untuk contoh kedua, kita harus membuat pengubahsuaian yang serupa:

five := append(three, four...)

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!

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