Ошибка утверждения типа Голанга - PullRequest
0 голосов
/ 28 октября 2018

В 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
            }

Когда я проверил, что тип интерфейса - это слайс, а тип подэлемента - Uint8, я делаю утверждение типа.Но по какой-то причине это не удается.Как это может быть?

Снимок экрана отладчика GoLand сразу после того, как 'ok' переменная стала 'false': http://imagehost.cc/image/v4403

Спасибо!

1 Ответ

0 голосов
/ 28 октября 2018

Я нашел причину.

Этот байт был действительно типа 'ByteString', который действительно был байт.Почему компилятор не понимает, что это равные типы, я не могу понять.

Мне пришлось изменить тип поля с псевдонима типа на простой '[] byte', и теперь он работает.

...