Menukar Tatasusunan Saiz Tetap kepada Tatasusunan Bersaiz Boleh Ubah (Kepingan) dalam Go
Anda sedang cuba menukar tatasusunan saiz tetap ( [32]bait) kepada kepingan bersaiz berubah-ubah ([]bait) menggunakan kod berikut:
package main import ( "fmt" ) func main() { var a [32]byte b := []byte(a) fmt.Println(" %x", b) }
Walau bagaimanapun, pengkompil mengembalikan ralat:
./test.go: 9: tidak boleh menukar (taip [32]bait) kepada menaip []bait
Ralat ini berlaku kerana penukaran langsung daripada tatasusunan bersaiz tetap kepada hirisan tidak dibenarkan dalam Go. Untuk menyelesaikannya, anda harus menggunakan operator hirisan ([:]) untuk mendapatkan hirisan ke atas tatasusunan sedia ada:
var a [32]byte b := a[:]
Ini akan mencipta hirisan (b) yang merujuk elemen dalam tatasusunan (a ). Potongan akan mempunyai tatasusunan sandaran yang sama seperti tatasusunan asal, tetapi panjang dan kapasitinya akan dilaraskan secara dinamik.
Untuk mengetahui lebih lanjut tentang perbezaan antara tatasusunan dan kepingan dalam Go, rujuk catatan blog komprehensif ini:
[Arrays and Slices in Go](https://blog.golang.org/go-slices-usage-and-internals)
Atas ialah kandungan terperinci Bagaimana untuk Menukar Tatasusunan Saiz Tetap kepada Slice Bersaiz Boleh Ubah dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!