3 回答
TA贡献1862条经验 获得超6个赞
在没有更多上下文的情况下很难给您意见,但看起来您试图使您的实现过于通用,这对于主要使用更动态语言或具有通用支持的人来说很常见。
学习围棋过程的一部分是学习接受它的类型系统,这取决于你来自哪里,它可能具有挑战性。
通常,在 Go 中,您希望支持一种可以容纳您需要处理的所有可能值的类型。在您的情况下,它可能是 int64。
例如,看看 math 包。它仅适用于 int64,并希望任何使用它的人都能正确地对其进行类型转换,而不是尝试转换所有内容。
另一种选择是使用类型不可知的接口,就像 sort 包一样。基本上,任何特定于类型的方法都将在您的包之外实现,并且您希望定义某些方法。
学习和接受这些属性需要一段时间,但总的来说,最终证明它在可维护性和健壮性方面是好的。接口确保您具有正交性,强类型确保您可以控制类型转换,这最终会导致错误以及内存中不必要的副本。
干杯
TA贡献1963条经验 获得超6个赞
你想解决什么问题?您描述的完整解决方案如下所示:
func Num64(n interface{}) interface{} {
switch n := n.(type) {
case int:
return int64(n)
case int8:
return int64(n)
case int16:
return int64(n)
case int32:
return int64(n)
case int64:
return int64(n)
case uint:
return uint64(n)
case uintptr:
return uint64(n)
case uint8:
return uint64(n)
case uint16:
return uint64(n)
case uint32:
return uint64(n)
case uint64:
return uint64(n)
}
return nil
}
func DoNum64Things(x interface{}) {
switch Num64(x).(type) {
case int64:
// do int things
case uint64:
// do uint things
default:
// do other things
}
}
- 3 回答
- 0 关注
- 221 浏览
添加回答
举报