Go语言中如何无需逐个指定元素即可整体传入字节数组?
问题:简化gopacket.Payload的字节数组传入方式
我定义了如下字节数组:
as := []byte{0x01, 0x01, 0x00, 0x00}
并在以下语句中使用该变量as:
if err := gopacket.SerializeLayers(buffer, options, ethernetLayer, pppoe, gopacket.Payload{as[0], as[1], as[2], as[3]}); err != nil { pppoeLogger.Error("serialize-error") }
其中gopacket.Payload类型定义为:
type Payload []byte
我尝试过gopacket.Payload{as...}这种方式传入,但无法生效,请问是否有更简便的方法,无需逐个指定元素即可传入该字节数组?
解决方案
直接通过类型转换即可完成,因为gopacket.Payload本质是[]byte的类型别名,不需要用结构体字面量的方式初始化:
if err := gopacket.SerializeLayers(buffer, options, ethernetLayer, pppoe, gopacket.Payload(as)); err != nil { pppoeLogger.Error("serialize-error") }
为什么之前的方式无效?
gopacket.Payload{as...}这种写法是试图用切片展开来初始化结构体字面量,但Payload并不是结构体,它只是[]byte的别名,Go不支持这种针对切片类型别名的展开初始化语法。直接类型转换是最简洁且符合Go语法的方式。
内容的提问来源于stack exchange,提问作者baris
相关产品推荐
相关产品推荐

