看了很多文字说:map 元素是无法取址的, 无法对其进行修改。
比如下面例子:
package main
import "fmt"
func main() {
m := map[int]Person{
1: Person{"Andy", 10},
2: Person{"Tiny", 20},
3: Person{"Jack", 30},
}
fmt.Println(m[1])
m[1].name = "KL"
fmt.Println(m[1])
}
type Person struct {
name string
age int
}
上面代码的m[1].name = "KL"会报: cannot assign to struct field m[1].name in map
我们再来看一个例子:
package main
import "fmt"
func main() {
m := map[int]string{
1: "A",
2: "B",
}
fmt.Println(m[1])
m[1] = "KL"
fmt.Println(m[1])
}
type Person struct {
name string
age int
}
上面代码运行正常,成功修改了map的值。
为什么2个例子有差别。map不能修改元素到底对不对呢?
Assignments
map indexing expression 也是可以被赋值的(虽然它不可以取址)。
m[1]
是 map indexing expression ,但m[1].name
不是。