Golang类型断言失败

时间:2018-10-28 20:02:47

标签: go types casting slice assertion

在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

谢谢!

1 个答案:

答案 0 :(得分:0)

我找到了原因。

那个字节切片实际上是'ByteString'类型,实际上是一个字节切片。 为什么编译器不理解这些是我无法理解的相等类型。

我不得不将字段的类型从“类型别名”更改为简单的[[byte],并且现在可以使用了。