1 map和slice本身是值传递。但是如果修改他们指向的内容,会影响到函数外。
2 对map和slice的复制,他们底层指向和操作的还是同一对象。
package main
import (
"fmt"
)
func test2(m map[string]int) {
m["aaa"] = 10
}
func test4(m map[string]int) {
m = make(map[string]int)
}
func test3(a []int) {
a = append(a, 10)
}
func test_mod_slice_content(a []int) {
a[0] = 10000
}
func test() {
a := make(map[string]int)
fmt.Printf("%v\n", a)
test2(a)
fmt.Printf("%v\n", a)
aa := a
aa["b"] = 20
fmt.Printf("%v\n", a)
fmt.Printf("%v\n", aa)
test4(aa)
fmt.Printf("%v\n", aa)
b := make([]int, 0)
fmt.Printf("%v\n", b)
test3(b)
fmt.Printf("%v\n", b)
b = append(b, 20)
fmt.Printf("%v\n", b)
test_mod_slice_content(b)
fmt.Printf("%v\n", b)
}
func main() {
test()
}
输出:
map[]
map[aaa:10]
map[b:20 aaa:10]
map[aaa:10 b:20]
map[aaa:10 b:20]
[]
[]
[20]
[10000]
有疑问加站长微信联系(非本文作者)