当前位置: 首页 > 面试题库 >

无法分配给映射中的结构字段

梁丘波
2023-03-14
问题内容

我有这样的数据结构

type Snapshot struct {
  Key   string
  Users []Users
}

snapshots := make(map[string] Snapshot, 1)

// then did the initialization
snapshots["test"] = Snapshot {
  Key: "testVal",
  Users: make([]Users, 0),
}

Users 是另一个结构。

然后,当我尝试Users在Users切片中添加一些新值时,如下所示:

snapshots["test"].Users = append(snapshots["test"].Users, user)

我不断收到此错误:

cannot assign to struct field snapshots["test"].Users in map

还尝试在这里https://github.com/golang/go/issues/3117变通方法,像这样:

tmp := snapshots["test"].Users
tmp = append(tmp, user)
snapshots["test"].Users = tmp

但是没有运气,仍然是完全相同的错误。

并且还尝试使用指针声明地图,因此:snapshots := make(map[string] *Snapshot, 1),仍然没有运气。


问题答案:

首先,对于这个问题,本文中的解决方案为什么在将值设置为结构中的值作为映射中的值时出现“无法分配”错误?工作完美。

然后,最后弄清楚了为什么我已经更改为使用指针之后,我的情况仍然无法使用,请参考以下非常简单的代码:

a := make([]int, 3)
fmt.Println(len(a))

b := make(map[string]string, 3)
fmt.Println(len(b))

认为输出将是什么?我只是以为一切都会是:3,但实际上对于地图而言,输出将是0

然后稍后在地图初始化过程中,我使用了for循环并使用此值len(snapshots),这意味着初始化过程将永远不会运行。

是的,这就是原因。



 类似资料:
  • 问题内容: 假设以下 为什么无法访问现在存储在映射中的struct实例? 任何人都可以阐明如何访问映射存储的结构,或为何无法访问它的逻辑? 笔记 我知道您可以通过复制结构,更改副本并将其复制回到地图中来实现这一点-但这是一项昂贵的复制操作。 我也知道这可以通过在我的地图中存储结构指针来完成,但是我也不想这样做。 问题答案: 根本问题是您无法获取地图中某物的地址。您可能会认为编译会重新安排为 但这不

  • 问题内容: 我的任务是编写一个程序,要求用户输入5个存储在列表中的名称。接下来,它随机选择这些名称之一,并宣布该人为获胜者。唯一的问题是,当我尝试运行它时,它说。 这是我的代码: 我必须能够生成一个随机名称。 问题答案: 操作员的左侧需要为变量。您在这里所做的就是告诉python:“您知道数字1吗?将其设置为输入的字符串。”。是文字数字,而不是变量。始终是,您无法将其“设置”为其他内容。 变量就像

  • Navicat 会依源表或集合对字段类型和长度作出假设。你可以从下拉式列表选择你所需的类型。 【提示】导入多个表或集合时,你可以从“源表”或“源集合”下拉式列表选择其他表或集合。 如果你导入数据到现有的表或集合,你则需要手动映射源字段名到目标,或右击并从弹出式菜单选择“智慧配对全部字段”、“直接匹配全部字段”和“全部取消匹配”来进行快速匹配。 如果你透过 ODBC 导入,“条件式查询”按钮会打开“

  • Navicat 会依源表或集合对字段类型和长度作出假设。你可以从下拉式列表选择你所需的类型。 【提示】导入多个表或集合时,你可以从“源表”或“源集合”下拉式列表选择其他表或集合。 如果你导入数据到现有的表或集合,你则需要手动映射源字段名到目标,或右击并从弹出式菜单选择“智慧配对全部字段”、“直接匹配全部字段”和“全部取消匹配”来进行快速匹配。

  • 当尝试使用@Data和@Builder映射嵌套对象时,mapStruct会抛出以下错误:“在目标类型中找不到属性“profile”的读取访问器。” 为简单起见,使用Lombok简化模型 前两个映射按预期工作,但当尝试将两者结合起来时,会在编译时引发以下错误“在目标类型中的属性“配置文件”中找不到读取访问器。” 如果有人能在这件事上帮我,我会非常感激。 谢谢, 乔纳森。

  • 问题内容: 我正在从syscall到Go中的某些WinApi获得结果。我可以轻松地从C代码映射简单的结构,但是如何处理如下的C结构? 如果在Go中定义了所有可能的类型 在将这个Go结构作为参数进行系统调用之后,我已经将它存储在内存中并且可以像往常一样在Go中访问它,但是(在上面的代码中)仅始终填充(在上面的代码中)之后的第一个字段,其他两个字段始终为空。我知道这是C语言中的预期行为,因为一次只能有