dongzhuang6247 2018-05-02 10:37
浏览 377
已采纳

没有使用Golang的泛型的类型断言的解决方案?

I'm using gorm, and it allows many data types like int, uint, int8, uint8 ....

Then I have a plugin in template like this:

f["UNIX2STR"] = func(t interface{}, f string) string {
        switch t.(type) {
        case int:
            return time.Unix(int64(t.(int)), 0).Format(f)
        case uint:
            return time.Unix(int64(t.(uint)), 0).Format(f)
        case uint8:
            return time.Unix(int64(t.(uint8)), 0).Format(f)
        case *int:
            return time.Unix(int64(*t.(*int)), 0).Format(f)
        case *uint:
            return time.Unix(int64(*t.(*uint)), 0).Format(f)
        case *uint8:
            return time.Unix(int64(*t.(*uint8)), 0).Format(f)
        .....
        default:
            return ""
        }
        // return time.Unix(int64(t), 0).Format(f)
    }

It converts all integer types to formatted string. So what am I suppose to do? List all gorm supported int types and cast it to int64?

I have searched many days for solution convert interface{} to its true type without using type assertion but didn't work.

  • 写回答

3条回答 默认 最新

  • drdzpknk76046 2018-05-02 11:09
    关注

    I've not used gorm, but I think that something like this could solve your problem:

    func formatUnix(t interface{}, f string) (string, error) {
        timestampStr := fmt.Sprint(t)
        timestamp, err := strconv.ParseInt(timestampStr, 10, 64)
        if err != nil {
            return "", err
        }
        return time.Unix(timestamp, 0).Format(f), nil
    }
    

    Rather than listing all potential types, it simply converts the interface{} to a string using fmt.Sprint() and then convert the string to int64 using strconv.ParseInt().

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么