为了账号安全,请及时绑定邮箱和手机立即绑定

无法分配给结构字段/分配给零映射中的条目

无法分配给结构字段/分配给零映射中的条目

Go
回首忆惘然 2023-04-17 15:20:50
有谁知道为什么这不起作用?我现在已经绞尽脑汁大约 4 个小时了。我无法让它工作。在我看来,我正在尝试做同样的事情两次。我在一个结构中制作一个字段的地图,然后我在另一个结构中的另一个字段上再次这样做。如果我尝试制作地图。它失败了:“无法分配给结构字段。Bet.Events [“one”]。地图中的跑步者”。因此,如果我删除 make,并尝试分配它,我会得到:“分配给 nil 映射中的条目”https://play.golang.org/p/kRcXoyO-8FNvar Bet BetStructtype 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 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

map 的默认值是nil(之前或没有 make(map))


您在此代码中设置了默认值Runners:


Bet.Events["one"] = Event{

    Name: "first",

}

因此,Runners没有明确定义并设置为nil.


结构是可变的,除了映射元素。(您无法重新初始化地图

元素Bet.Events["one"],因为它不可寻址。


你需要做:


Bet.Events["one"] = Event{

    Name: "first",

    Runners: make(map[int]Runner),

}

查看完整回答
反对 回复 2023-04-17
  • 1 回答
  • 0 关注
  • 81 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信