golang 赋值拷贝问题

数组切片:

func main() {
    m := make(map[string]interface{}, 0)
    l := make([]int64, 0)
    m["hello"] = l
    l = append(l,1)
    fmt.Println(m["hello"]) //[]
}

func main() {
    l := make([]int64, 0)
    l = append(l, 10)
    l1 := l
    l1 = append(l1, 20)
    fmt.Println(l, l1) //[10] [10 20]
}
mapfunc main() {
    m := make(map[string]interface{}, 0)
    l := map[string]interface{}{
        "hello":"hi",
    }
    m["hello"] = l
    l["hi"]=1
    fmt.Println(m["hello"]) //map[hello:hi hi:1]
}

func main() {
    m := make(map[string]interface{}, 0)
    m["hello"] = 1
    n := m
    n["hello"] = 2
    fmt.Println(n,m) //map[hello:2] map[hello:2]
}
struct:

type A struct {
    B int
}

func main() {
    m := make(map[string]interface{}, 0)
    l := A{1}
    m["hello"] = l
    l.B = 2
    fmt.Println(m["hello"]) //{1}
}

func main() {
    l := A{1}
    l1 := l
    l.B = 2
    fmt.Println(l1, l) //{1} {2}
}

总结:
1. golang 切片和struct的赋值为值拷贝,map为引用拷贝。
2. 如果要做到修改对象,使用数组指针。

你可能感兴趣的:(golang)