golang中map的"坑"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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,那么应该怎么改呢

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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