1

我有一个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)
}
4

2 回答 2

4

您不能将自己的 myByte 切片转换为字节切片。

但是你可以有自己的字节片类型,可以转换为字节片:

package main

import "fmt"

type myBytes []byte

func main() {
     var bs []byte
     bs = []byte(myBytes{1, 2, 3})
     fmt.Println(bs)
}

根据您的问题,这可能是一个不错的解决方案。(您无法将字节与 myBytes 与字节区分开来,但您的切片是类型安全的。)

于 2013-07-25T06:49:09.933 回答
1

显然,没有办法,解决方案只是循环整个切片转换每个元素并复制到新切片或“下推”类型转换到每个元素的操作。

在 go 中类型转换接口切片

于 2013-07-25T04:44:26.530 回答