package main
import "fmt" type Userinfo struct { Name string } var list map[string]Userinfo //在golang中一切皆值 func main() { list:=make(map[string]Userinfo) user:=Userinfo{"haoxiong"} list["userinfo"]=user /* 因为在Go里面所有的都是值copy,list["name"]取值的时候实际上是里面的struct的值完整的 一个copy,如果允许了这样的操作list["name"].XXX这样的操作,那么实际上你修改的东西没有 复制回原来的struct,所以你可以采用map[key]*struct的定义来进行操作,如下所示是可以正确 操作的 */ //错解这一行将会报错 //list["userinfo"].Name="haoxiong1" //通过指针获取值,正解 list1 := make(map[string]*Userinfo) user1:= &Userinfo{"haoxiong"} list1["userinfo"]=user1 fmt.Println(list1["userinfo"].Name) list1["userinfo"].Name="chang haoxiong" fmt.Println(list1["userinfo"].Name) //通过断言 我们可以获取到list["userinfo"]的拷贝我们操作userinfo时不会影响到之前list["userinfo"]中Name的值 if userinfo,ok:= list["userinfo"];ok{ userinfo.Name="haoxiong1" fmt.Println(list["userinfo"].Name) } }package main import "fmt" type Userinfo struct { Name string } var list map[string]Userinfo //在golang中一切皆值 func main() { list:=make(map[string]Userinfo) user:=Userinfo{"haoxiong"} list["userinfo"]=user /* 因为在Go里面所有的都是值copy,list["name"]取值的时候实际上是里面的struct的值完整的 一个copy,如果允许了这样的操作list["name"].XXX这样的操作,那么实际上你修改的东西没有 复制回原来的struct,所以你可以采用map[key]*struct的定义来进行操作,如下所示是可以正确 操作的 */ //错解这一行将会报错 //list["userinfo"].Name="haoxiong1" //通过指针获取值,正解 list1 := make(map[string]*Userinfo) user1:= &Userinfo{"haoxiong"} list1["userinfo"]=user1 fmt.Println(list1["userinfo"].Name) list1["userinfo"].Name="chang haoxiong" fmt.Println(list1["userinfo"].Name) /*通过断言 我们可以获取到list["userinfo"]的拷贝我们操作userinfo时不会影响到之前list["userinfo"]中Name的值*/ if userinfo,ok:= list["userinfo"];ok{ userinfo.Name="haoxiong1" fmt.Println(list["userinfo"].Name) } }
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于