我在接口中包装了一个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
的类型不同,因此我必须明确枚举所有可能的大小。
答案 0 :(得分:2)
在这里反映您的朋友:
package main
import (
"fmt"
"reflect"
)
func main() {
var in interface{} = [3]byte{1, 2, 3} // an element from your []interface{}
var size = 3 // you got this
out := make([]byte, size) // slice output
for i := 0; i < size; i++ {
idxval := reflect.ValueOf(in).Index(i) // magic here
uidxval := uint8(idxval.Uint()) // you may mess around with the types here
out[i] = uidxval // and dump in output
}
fmt.Printf("%v\n", out)
}
在这里,切片是更好的选择输出,因为您指出长度没有定义。 Magic所做的是通过反射索引输入接口的值。这不是很快,但是可以解决问题。