在Golang中, 我正在尝试将接口转换为字节片。 调试器清楚地表明它是一个字节片。
// Check an Interface's Type.
ifcType = reflect.TypeOf(ifc).Kind()
// Array?
if ifcType == reflect.Slice {
// Get Type of Sub-Elements.
ifcElementType = reflect.TypeOf(ifc).Elem().Kind()
if ifcElementType == reflect.Uint8 {
// Array of Bytes.
// => 'bencode' Byte String.
// Convert the Type.
ba, ok = ifc.([]byte)
if !ok {
return nil, ErrTypeAssertion
}
当我检查接口的类型为Slice且子项的类型为Uint8时,我执行类型声明。但是由于某种原因,它失败了。怎么可能呢?
“ ok”变量刚变为“ false”之后的GoLand调试器屏幕截图: http://imagehost.cc/image/v4403
谢谢!
答案 0 :(得分:0)
我找到了原因。
那个字节切片实际上是'ByteString'类型,实际上是一个字节切片。 为什么编译器不理解这些是我无法理解的相等类型。
我不得不将字段的类型从“类型别名”更改为简单的[[byte],并且现在可以使用了。