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)
}
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于