In dem Code-Schnipsel unten möchte ich eine sehr einfache Berechnung d = a + b + c; a, b, c = b, c, d
machen. Es iteriert mehrmals.Weird Verhalten von big.NewInt anonyme Variable
Im ersten Versuch, ich mache eine anonyme Variable big.NewInt(0).Add(a, b)
das Ergebnis a + b
, dann fügen Sie es zu bekommen und c
das Endergebnis a + b + c
zu bekommen. Aber von der zweiten Iteration, d.Add(big.NewInt(0).Add(a, b), c)
änderte den Wert von c
, dann b
, dann a
, und natürlich ist das Endergebnis falsch.
Allerdings gab mir die Methode des zweiten Versuchs die richtige Antwort. Kann mir bitte jemand sagen warum?
package main
import (
"fmt"
"math/big"
)
func main() {
// first try
a := big.NewInt(1)
b := big.NewInt(2)
c := big.NewInt(3)
d := big.NewInt(0)
for i := 0; i < 5; i++ {
// d = a + b + c
d.Add(big.NewInt(0).Add(a, b), c)
fmt.Println(a, b, c, d)
// a <- b, b <- c, c <- d
a, b, c = b, c, d
fmt.Println(a, b, c, d)
}
fmt.Println(d)
// second try
a = big.NewInt(1)
b = big.NewInt(2)
c = big.NewInt(3)
d = big.NewInt(0)
for i := 0; i < 5; i++ {
// d = a + b + c
d = big.NewInt(0).Add(big.NewInt(0).Add(a, b), c)
fmt.Println(a, b, c, d)
// a <- b, b <- c, c <- d
a, b, c = b, c, d
fmt.Println(a, b, c, d)
}
fmt.Println(d)
}
Ich habe es. Danke vielmals. – Alexander