本文介绍了golang 中如何给map中的struct 赋值,急急急!!!!的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

求大神指教

package main

import (
    "fmt"
)

type User struct {
    name string
    age  int
}

func main() {

    test := map[int]User{1: User{"zhang", 10}, 2: User{"li", 9}}

    test[1].name = "zhao"

    fmt.Println(test)

    /*
        这种方式也行,但是我要用协程,数据要共享,so,不能用以下方式
        tmp := test[1]
        tmp.name = "zhao"
        test[1] = tmp
        fmt.Println(test)

    */

}

会报错
./test3.go:16: cannot assign to test[1].name

解决方案
   tmp := test[1]
   tmp.name = "zhao"
   test[1] = tmp

这种用法在goroutine 中使用时在map 上加上锁也没有问题吧

test := map[int]*User{1: &User{"zhang", 10}, 2: &User{"li", 9}}
test[1].name = "zhao"

用指针的话应该更好一点吧,不过也存在data race,需要加锁

这篇关于golang 中如何给map中的struct 赋值,急急急!!!!的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!