Go 在append()上重写自身的big.Int切片

Go 在append()上重写自身的big.Int切片,go,slice,bigint,Go,Slice,Bigint,我试图从3和I的平方根之间的奇数中得到一个big.int 当我运行以下代码时: import ( "fmt" "math/big" ) func main() { i := big.NewInt(101) var divisorsOfPrime []*big.Int squareRoot := big.NewInt(0).Sqrt(i) for n := big.NewInt(3); n.Cmp(squareRoot) == -1; n.Add(

我试图从3和
I
的平方根之间的奇数中得到一个
big.int

当我运行以下代码时:

import (
    "fmt"
    "math/big"
)

func main() {
    i := big.NewInt(101)
    var divisorsOfPrime []*big.Int
    squareRoot := big.NewInt(0).Sqrt(i)
    for n := big.NewInt(3); n.Cmp(squareRoot) == -1; n.Add(n, big.NewInt(2)) {
        divisorsOfPrime = append(divisorsOfPrime, n)
    }
    fmt.Println(divisorsOfPrime)
}
我得到输出:

[11 11 11 11]
[3 5 7 9 11]
但我希望产出:

[11 11 11 11]
[3 5 7 9 11]
我能做些什么来解决这个问题


谢谢

您有一个
*big.Int
的片段,您可以在其中反复存储相同的指针

相反,您需要在每次迭代中存储
n
的副本

替换:

divisorsOfPrime = append(divisorsOfPrime, n)
与:

顺便说一下,这不是特定于
*big.Int
;只要处理指针,就需要创建新对象并存储指向这些新对象的指针,而不是原始对象的指针。请注意,
n
只分配了一次