【发布时间】:2013-06-20 18:10:35
【问题描述】:
我经常遇到这样的情况,我期望 int(任何类型,int/int8/16/32/64)并使用类型开关检查它
switch t := v.(type) {
case int, int8, int16, int32, int64:
// cast to int64
case uint, uint8, uint16, uint32, uint64:
// cast to uint64
}
现在我不能使用直接转换,因为在这种情况下t 将是interface{} 类型。对于每个整数类型,我真的必须将其拆分为 cases 吗?
我知道我可以使用reflect.ValueOf(v).Int() 通过反射来做到这一点,但难道不应该有更好(不那么冗长)的方法吗?
更新:
提交了一个问题,Rob 建议在这种情况下只使用 reflect。
【问题讨论】:
-
你真正想解决什么问题?为什么原始类型未知?
-
更好的方法是让你的函数接受
int64并将转换留给调用者。 -
@iliacholy 如果考虑参数列表
func(format string, args...interface{})是不可能的,本例就是这种情况。 -
对不起,是的,罗伯。把 rsc@ 和 r@ 搞混了。