在 Go 中将切片转换为数组
在 Go 中,尝试直接将切片分配给数组将导致编译错误。本题探讨了如何将特定长度的切片转换为数组。
问题陈述
考虑一个结构体,定义一个带有由 4 个数组组成的 Magic 字段的前导块bytes:
type Lead struct { Magic [4]byte Major, Minor byte Type uint16 Arch uint16 Name string OS uint16 SigType uint16 }
任务是使用以下命令将 4 字节的切片分配给 Magic 字段语法:
lead := Lead{} lead.Magic = buffer[0:4] // Attempt to assign slice to array
解决方案
要将指定长度的切片转换为数组,Go 提供了以下方法:
将 copy() 与数组子切片一起使用
内置通过将数组视为切片,可以欺骗 copy 函数将切片复制到数组:
copy(varLead.Magic[:], someSlice[0:4])
使用 For 循环
迭代切片元素并将它们分配给数组elements:
for index, b := range someSlice { varLead.Magic[index] = b }
使用数组文字
另一种方法是直接使用数组文字:
type Lead struct { Magic [4]byte Major, Minor byte Type uint16 Arch uint16 Name string OS uint16 SigType uint16 } lead := Lead{Magic: [4]byte{0x12, 0x34, 0x56, 0x78}}
以上是如何将 Go 切片转换为数组?的详细内容。更多信息请关注PHP中文网其他相关文章!