首页 > 解决方案 > 以编程方式创建嵌套数组

问题描述

我想测试我的序列化格式的鲁棒性,并想序列化一个嵌套数组。序列化实际上在某个时候死了,但我不知道确切的深度。现在我只是手动定义一个大数组,但我想以编程方式完成,所以我可以弄清楚深度何时太高。为每次迭代更改代码很乏味......

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

我想要的是这样的:

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

我是 Golang 新手,我不知道在这种情况下如何绕过类型安全。

标签: arraysgomultidimensional-arraynested

解决方案


在 go 中,您无法更改变量的类型,因此您需要使用 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)


推荐阅读