map[string]struct{}类型的赋值问题

kekemuyu · 2019-12-17 14:38:26 · 1886 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2019-12-17 14:38:26 的主题,其中的信息可能已经有所发展或是发生改变。

如下例子,若要改变aa["1"]中Gi的值,只能:先读出AA结构的值---改变AA的某个字段---赋值给aa["1"]吗?

package main

import (
    "fmt"
)

type AA struct {
    Gi int
    Gs string
}

func main() {
    aa := make(map[string]AA)
    aa["1"] = AA{1, "1"}
    if v, ok := aa["1"]; ok {
        v.Gi = 2
        aa["1"] = v
    }

    fmt.Printf("%+v\n", aa)
}

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1886 次点击  ∙  1 赞  
加入收藏 微博
2 回复  |  直到 2019-12-17 20:26:06
liuzhiwang
liuzhiwang · #1 · 5年之前

map value 无法寻址,使用*AA可以解决上述问题

kekemuyu
kekemuyu · #2 · 5年之前
liuzhiwangliuzhiwang #1 回复

map value 无法寻址,使用*AA可以解决上述问题

感谢指教,已验证可以。

package main

import (
    "fmt"
)

type AA struct {
    Gi int
    Gs string
}

func main() {
    aa := make(map[string]AA)
    aa["1"] = AA{1, "1"}
    if v, ok := aa["1"]; ok {
        v.Gi = 2
        aa["1"] = v
    }

    fmt.Printf("%+v\n", aa)
    bb := make(map[string]*AA)
    bb["2"] = &AA{2, "2"}
    bb["2"].Gi = 3
    for k, v := range bb {
        fmt.Printf("%v:%+v\n", k, v)
    }

}
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传