我使用的是type myByte byte
,因为我想在逻辑上区分不同类型的字节。
我可以使用byte(myByte(1))
轻松转换,
但我找不到要转换或转换切片:[]byte([]myByte{1})
失败。
这样的事情可能吗?内存中的位是相同的(对吗?)所以应该有一些方法,不能逐字节地复制到新对象中。
例如,这些都不起作用:http://play.golang.org/p/WPhD3KufR8
package main
type myByte byte
func main() {
a := []myByte{1}
fmt.Print(byte(myByte(1))) // Works OK
fmt.Print([]byte([]myByte{1})) // Fails: cannot convert []myByte literal (type []myByte) to type []byte
// cannot use a (type []myByte) as type []byte in function argument
// fmt.Print(bytes.Equal(a, b))
// cannot convert a (type []myByte) to type []byte
// []byte(a)
// panic: interface conversion: interface is []main.myByte, not []uint8
// abyte := (interface{}(a)).([]byte)
}
答案 0 :(得分:4)
您无法将自己的myByte切片转换为一个字节切片。
但是你可以拥有自己的字节切片类型,可以转换为 一个字节切片:
package main
import "fmt"
type myBytes []byte
func main() {
var bs []byte
bs = []byte(myBytes{1, 2, 3})
fmt.Println(bs)
}
根据您的问题,这可能是一个不错的解决方案。 (您不能将字节与myBytes区分开来, 但你的切片是类型安全的。)
答案 1 :(得分:1)
显然,没有办法,解决方案就是遍历整个切片,转换每个元素并复制到新切片或“向下推”类型转换为每个元素的操作。