You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言map of sets初始化报assignment to entry in nil map问题

错误原因分析

这个报错是两个Go语法特性共同导致的:

  • 变量作用域问题:Line函数匹配食谱开头行的if代码块中,使用了currentRecipe := line[2:]短变量声明,这里创建的是if代码块内的局部同名变量,仅在当前if块内有效,完全没有修改Line函数入参里的currentRecipe值。出了if块后,Line函数作用域下的currentRecipe还是初始的空字符串。
  • 值传递特性问题:Go语言的字符串是值类型,main函数调用Line时是将currentRecipe的值拷贝传入,就算在Line函数内正确修改了入参currentRecipe的值,也不会同步更新main函数中存储的当前食谱名,下一次调用Line时传入的还是旧值。

开发者在标记(1)的位置确实完成了子map初始化,但初始化的是if块内局部变量对应的食谱名的key;当代码执行到标记(2)的食材行逻辑时,currentRecipe为空字符串,total映射中从未初始化过空字符串对应的子map,直接对tot[""][nutri]赋值就会触发assignment to entry in nil map错误。

快速修复方案

你可以任选一种方式修改:

  1. 将currentRecipe改为指针类型传递,同时避免短变量声明覆盖外层变量:把Line函数的入参改为currentRecipe *string,if块内修改为*currentRecipe = line[2:],main函数调用时传入&currentRecipe
  2. 调整Line函数的返回值,每次调用后将当前食谱名返回给main函数更新变量

内容的提问来源于stack exchange,提问作者ymudyruc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:54:03