小编Ali*_*our的帖子

从范围生成的值具有相同的指针值

对于这两个结构体

type A struct {
    Number *int
}

type B struct {
    Number int
}
Run Code Online (Sandbox Code Playgroud)

如果我想循环 B 的切片并将 B.Number 的值分配给新的 A.Number

func main() {
    aSlice := []A{}
    bSlice := []B{B{1}, B{2}, B{3}}
    for _, v := range bSlice {
        a := A{}
        a.Number = &v.Number
        aSlice = append(aSlice, a)
    }
}  
Run Code Online (Sandbox Code Playgroud)

我会发现所有aSlice a.Number都是相同的值和相同的指针。

for _, v := range aSlice {
        fmt.Printf("aSlice Value %v Pointer %v\n", *v.Number,v.Number)
    }
Run Code Online (Sandbox Code Playgroud)

将打印
aSlice Value 3 Pointer 0x10414020
aSlice Value 3
Pointer 0x10414020 aSlice Value …

go

4
推荐指数
1
解决办法
698
查看次数

标签 统计

go ×1