gpt4 book ai didi

casting - Go:在类型开关中将任何 int 值转换为 int64

转载 作者:IT老高 更新时间:2023-10-28 13:04:57 34 4
gpt4 key购买 nike

我经常遇到这样的情况,我期望 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{} .我真的必须把它分成case吗? s 每个整数类型?

我知道我可以使用 reflect.ValueOf(v).Int() 通过反射来做到这一点,但不应该有更好(不那么冗长)的方法吗?

更新:

提交了一个问题,Rob 建议只使用 reflect在这种情况下。

最佳答案

如果没有更多上下文,很难给你一个意见,但看起来你试图让你的实现过于通用,这对于主要使用更动态的语言或具有通用支持的人来说很常见。

学习围棋过程的一部分是学习接受它的类型系统,这取决于你来自哪里,这可能是具有挑战性的。

通常,在 Go 中,您希望支持一种可以保存您需要处理的所有可能值的类型。在您的情况下,它可能是 int64。

例如,看看 math 包。它仅适用于 int64,并希望任何使用它的人都能正确地进行类型转换,而不是尝试转换所有内容。

另一种选择是使用与类型无关的接口(interface),就像 sort 包一样。基本上,任何特定类型的方法都将在您的包之外实现,并且您希望定义某些方法。

学习和接受这些属性需要一段时间,但总的来说,最终证明它在可维护性和健壮性方面是好的。接口(interface)确保您具有正交性,而强类型确保您可以控制类型转换,这最终会导致错误以及内存中不必要的副本。

干杯

关于casting - Go:在类型开关中将任何 int 值转换为 int64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17220764/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com