以编程方式创建嵌套数组

时间:2018-12-13 13:42:13

标签: arrays go multidimensional-array nested

我想测试我的序列化格式是否有鲁棒性,并想序列化一个嵌套数组。序列化实际上在某个时候终止,但是我不知道确切的深度。现在,我只是手动定义一个大数组,但是我想以编程方式进行操作,因此我可以弄清楚深度到底何时过高。为每次迭代更改代码很繁琐...

l := [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]string {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{"a"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}

我想要的是这样的

l := "a"
while(1){
    l = {l} //nest the slice/array once more
    print("round ", i)
    i++
}

我是Golang新手,在这种情况下,我不知道该如何避开类型安全性。

1 个答案:

答案 0 :(得分:2)

在执行过程中,您无法更改变量的类型,因此您需要将interface {}用作类型var l interface{},现在您可以执行以下操作:

l = "a"
for i:= 0;i<3;i++{
    l = []interface{}{l}
}

打印l会得到与[[[a]]]相同的输出[][][]string{{{"a"}}}

一个问题是您丢失了类型,将无法执行类似l[0][0][0]的操作来获取值。就我现在而言,您需要投射所有内容l.([]interface{})[0].([]interface{})[0].([]interface{})[0].(string)