..

golang中map的"坑"

package main

import (
	"fmt"
)

type User struct{
	Name string
}
func main(){
	var m = make(map[int]User)
	var u = User{
		Name: "Hello World",
	}
	m[1] = u
	fmt.Println(m[1].Name)
	
	
	var u2 =m[1]
	u2.Name="Hello Golang"
	fmt.Println(m[1].Name)
	
}
// Hello World
// Hello World

这段golang代码会输出两行Hello World,并不会输出Hello Golang,原因是golang中的map返回的是一个copy,而不是一个refrence。

如果要想返回一个refrence,那么应该怎么改呢

package main

import (
	"fmt"
)

type User struct{
	Name string
}
func main(){
	var m = make(map[int]*User)
	var u = User{
		Name: "Hello World",
	}
	m[1] = &u
	fmt.Println(m[1].Name)
	
	
	var u2 =m[1]
	u2.Name="Hello Golang"
	fmt.Println(m[1].Name)
	
}
// Hello World
// Hello Golang