我有一个type myByte byte我使用的,因为我想在逻辑上区分不同类型的字节。
type myByte byte
我可以轻松地进行转换byte(myByte(1)),
byte(myByte(1))
但我找不到转换或转换切片的方法:[]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) }
您不能将自己的myByte的片转换为字节的片。
但是您可以拥有自己的字节片类型,可以将其转换为字节片:
package main import "fmt" type myBytes []byte func main() { var bs []byte bs = []byte(myBytes{1, 2, 3}) fmt.Println(bs) }
根据您的问题,这可能是一个不错的解决方案。(您无法从字节中将字节与myBytes区别开来,但您的分片是类型安全的。)