gpt4 book ai didi

arrays - 数组中的 Golang 指针

转载 作者:行者123 更新时间:2023-12-01 22:43:53 24 4
gpt4 key购买 nike

我想知道为什么这段代码不能改变数组中的值

我尝试通过指针修改数组中的元素。不是按索引。

import "fmt"

func main() {
array := []Type{}

array = append(array, Type{2})
array = append(array, Type{3})
array = append(array, Type{4})
array = append(array, Type{5})

res := []*Type{}

for _, a := range array {
a1 := a
res = append(res, &a1)
}
for _,v := range res {
v1 := v
v1.number++
}
for _, t := range res {
fmt.Print(t.number)
}
}
type Type struct {
number int32
}

我的预期结果应该是 3,4,5,6。但结果并没有改变,所以我想知道详细原因。我是 Go 新手。请告诉我详细信息

最佳答案

如果问题是 为什么原始数组中的值没有被修改那么答案是因为 range 中引入了迭代项是原始项目的副本 .要解决您的问题,您可以执行以下操作:

for i := range array {
res = append(res, &array[i])
}

看看这个引用:
  • https://golang.org/ref/spec#For_clause
  • https://github.com/golang/go/wiki/Range#gotchas
  • https://tour.golang.org/moretypes/16
  • https://github.com/golang/go/issues/22791#issuecomment-345391395
  • https://www.ardanlabs.com/blog/2017/06/for-range-semantics.html
  • 关于arrays - 数组中的 Golang 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58422946/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com