无法分配给struct字段/不能分配给nil映射中的条目

时间:2018-10-01 22:16:13

标签: go

有人知道为什么这不起作用吗?

我已经绞尽脑汁了大约4个小时。我无法使其正常工作。

在我看来,我试图做两次相同的事情。我正在制作结构中一个字段的映射,然后又在另一个结构中的另一个字段上进行绘制。

如果我尝试制作地图。它失败并显示:“无法分配给结构字段。Bet.Events [“ one”]。地图中的运行程序”。

因此,如果我删除品牌,然后尝试分配它,则会得到:“分配给nil map中的条目”

https://play.golang.org/p/kRcXoyO-8FN

var Bet BetStruct

type BetStruct struct {
    Events     map[string]Event
}

type Event struct {
    Name       string
    Runners    map[int]Runner
}

type Runner struct {
    Name       string
}

func main(){

    // == THIS WORKS FINE ==
    Bet.Events = make(map[string]Event)

    Bet.Events["one"] = Event{
        Name: "first",
    }
    Bet.Events["two"] = Event{
        Name: "second",
    }

    // == THIS DOES NOT WORK ==
    Bet.Events["one"].Runners = make(map[int]Runner)

    Bet.Events["one"].Runners[0] = Runner{
         Name:  "Jeff",
    }
}

1 个答案:

答案 0 :(得分:2)

map的默认值为0110(在make(map)之前或没有make(map)之前)

您在以下代码中为010设置了默认值:

nil

因此,Runners的定义不明确,并设置为Bet.Events["one"] = Event{ Name: "first", }

结构是可变的期望映射元素。 您无法重新初始化地图元素Runners,因为它不可寻址。

您需要这样做:

nil

感谢@icza标记文本中的错误