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 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。
  • ¥20 CST怎么把天线放在座椅环境中并仿真
  • ¥15 任务A:大数据平台搭建(容器环境)怎么做呢?
  • ¥15 YOLOv8obb获取边框坐标时报错AttributeError: 'NoneType' object has no attribute 'xywhr'
  • ¥15 r语言神经网络自变量重要性分析
  • ¥15 基于双目测规则物体尺寸
  • ¥15 wegame打不开英雄联盟
  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)