dsgdg46465 2015-05-15 20:35
浏览 20
已采纳

神秘类型断言失败?

Under what circumstances could this code:

        v, ok := value.(int64)
        if !ok  {
            panic("NOPE "+reflect.TypeOf(value).Kind().String())
        } else {
            fmt.Printf("VAL: %d
",v)
        }

produce the panic with message panic: NOPE int64?

Is this a bug or is there something basic about the numeric types that I'm missing?

  • 写回答

1条回答 默认 最新

  • dougao9864 2015-05-15 21:00
    关注

    This can happen if you're using type declaration on numeric types. If you do something like this:

    type T int64 
    
    ...
    
    var value interface{} = T(1)
    

    and put it into your code, you'll get the exact same error. But if you don't check the kind, but the type, you'll see what's happening here:

    v, ok := value.(int64)
    if !ok {
        panic("NOPE " + reflect.TypeOf(value).String())
    } else {
        fmt.Printf("VAL: %d
    ", v)
    }
    

    produces the message:

    panic: NOPE main.T
    

    The kind of T is int64, but value is not int64.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行