Программно создать вложенный массив - PullRequest
0 голосов
/ 13 декабря 2018

Я хочу проверить мой формат сериализации на robustnes и хочу сериализовать вложенный массив.Сериализация фактически умирает в какой-то момент, но я не знаю, на какой глубине точно.Прямо сейчас я просто определяю большой массив вручную, но я хочу сделать это программно, чтобы я мог понять, когда именно глубина слишком велика.Изменение кода для каждой итерации утомительно ...

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

Мне нужно что-то вроде этого:

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

Я новичок в Голанге и не знаю, какЯ могу обойти безопасность типов в этом случае.

1 Ответ

0 голосов
/ 13 декабря 2018

На ходу вы не можете изменить тип переменной, поэтому вам нужно использовать интерфейс {} как тип 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)

...