То, чего вы пытаетесь достичь, невозможно, как вы это делаете. Речь идет о адресуемости и назначаемости . Вы должны искать спецификацию языка для этой клавиатуры. Значения карты не адресуемы, поэтому поле структуры в этом значении не может быть назначено. Также ваш дизайн структуры данных выглядит не очень эффективным, по крайней мере, для меня.
Мне кажется, нет причин хранить значения на карте, ссылки будут достаточно хорошими
type Node struct {
root string
links []*Node
}
//////
rooturl := "root"
graph := Node{rooturl, []*Node{}}
graphMap := make(map[string]*Node)
graphMap[rooturl] = &graph
u := "new node"
// if the link is not stored in the graph not create a new node
if _, exists := graphMap[u]; !exists {
graphMap[u] = &Node{u, []*Node{}}
}
// add the links to the graph
graphMap[rooturl].links = append(graphMap[rooturl].links, graphMap[u])
Рабочий пример
Если вы все равно предпочитаете сохранять фактические значения на карте, вам вообще не нужна древовидная структура. Это похоже на ненужные накладные расходы. Хранящейся на карте информации будет достаточно для любых операций.
type Node string
type Graph map[Node][]Node
////
rooturl := Node("root")
graph := make(Graph)
graph[rooturl] = make([]Node, 0)
u := Node("new node")
// if the link is not stored in the graph not create a new node
if node, exists := graph[u]; !exists {
graph[u] = make([]Node, 0)
graph[rooturl] = append(graph[rooturl], u)
}
Рабочий пример