【发布时间】:2018-05-02 10:37:12
【问题描述】:
我正在使用 gorm,它允许许多数据类型,例如 int, uint, int8, uint8 ....
然后我在模板中有一个这样的插件:
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)
}
它将所有整数类型转换为格式化字符串。
那我该怎么办?列出所有 gorm 支持的 int 类型并将其转换为 int64?
我已经搜索了很多天的解决方案,将 interface{} 转换为它的真实类型而不使用类型断言,但没有奏效。
【问题讨论】:
-
你应该做什么?你想完成什么?
-
@Flimzy 我不想列出所有整数类型,只用一行来完成。喜欢
return time.Unix(int64(t.(trueType)), 0).Format(f)。你没看到这里的麻烦吗?使用单个功能,我必须至少切换/案例 8 次才能完成一项简单的任务 -
@Flimzy
I have searched many days for solution convert interface{} to its true type without using type assertion but didn't work.没看过这行? -
我看不出有什么问题,因为我看不出你想要完成什么。您专注于特定的解决方案,但尚未解释问题。您需要该 switch 语句的原因是什么?您要达到的目标是什么?
-
多年来,我一直在使用 Go 通过 gorm 和类似的库访问数据库,并且从未觉得需要像您在问题中那样使用大型 switch 语句。几乎可以肯定有一种不同的方法可以解决您的问题,但是如果不知道您的目标,就很难说。换句话说,这看起来像是一个 XY 问题。
标签: generics go casting type-conversion type-assertion