【发布时间】:2019-09-22 01:15:42
【问题描述】:
我有一个包含在接口中的T 数组。我事先知道数组的大小。如何编写一个通用函数来获取任何数组长度的数组(或切片)?例如。对于尺寸 3,我想要类似的东西
var values interface{} = [3]byte{1, 2, 3}
var size = 3 // I know the size
var _ = values.([size]byte) // wrong, array bound must be a const expression
我不能真正进行类型切换,因为 [1]byte 与 [2]byte 等类型不同,所以我必须明确枚举所有可能的大小。
【问题讨论】:
-
你不能。由于错误状态,数组大小必须是一个常量表达式;大小是数组类型定义的一部分,Go 是编译时类型安全的。如果您需要不同大小的数组,请改用切片。
-
即使
size可以是运行时值,您会如何处理结果?除了interface{}类型的变量之外,您不能将它分配给任何东西,然后您又回到了开始的地方。 -
固定大小的数组在 Go 中很少有用。你确定不能在这里只使用切片吗?
-
@EliBendersky @Adrian 我可以在“接收器”类型中使用切片,但作为固定大小数组的原始类型来自一个库,该库将一些数据解组并将它们放入
[]interface(因为最初它们可以是任何类型)。我需要的是获取[]interface类型中的值,但我可以吗? -
你能指出在输入库中进行编组的代码吗?
标签: arrays go interface type-assertion