Я хотел бы иметь возможность написать функцию GoLang для получения массива ключей и значения (т.е. keys={"a", "b", "c"}, value=123
), а затем построить структуру данных из вложенных карт, где позиционный индекс в массиве соответствует глубина на вложенной карте, а значение присваивается последнему ключу. Например, учитывая приведенные выше ключи и значение, я хочу построить следующую структуру словаря
{"a":{"b":{"c":123}}}
Ниже приведен код, который у меня есть в настоящее время. Проблема заключается в том, что полученная карта выглядит следующим образом:
{"a":{}, "b":{}, "c":123}.
Любой совет относительно того, как я должен изменить это / почему это происходит, будет высоко оценен.
import (
"fmt"
)
type dict map[interface{}]interface{}
func main() {
vals := []interface{}{"a", "b", "c"}
// create a dictionary
d := make(dict)
d.Set(vals, 123)
// print it
fmt.Println(d)
}
func (d dict) Set(keys []interface{}, value interface{}) {
d2 := d
fmt.Println("Initial dict: ", d2)
keylen := len(keys)-1
for _, key := range keys[:keylen] {
// if key exists, recurse into that part of the dict
if entry, ok := d2[key]; ok {
d2 := entry
fmt.Println("Entered level in dict: ", d2)
} else {
d3 := make(dict)
d2[key] = d3
d2 := d3
fmt.Println("Created new level in dict: ", d2)
}
}
d2[keys[keylen]] = value
fmt.Println("Final dict: ", d2)
}