Warum, wenn wir struct mit (* structObj) referenzieren, scheint golang eine neue Kopie von structObj zurückzugeben, als dieselbe Adresse von original structObj zurückzugeben? Könnte einige misunderstand von mir auf das sein, suchen Sie so freundlich Klärungist dereference golang struct eine neue Kopie von struct zurückgeben?
package main
import (
"fmt"
)
type me struct {
color string
total int
}
func study() *me {
p := me{}
p.color = "tomato"
fmt.Printf("%p\n", &p.color)
return &p
}
func main() {
p := study()
fmt.Printf("&p.color = %p\n", &p.color)
obj := *p
fmt.Printf("&obj.color = %p\n", &obj.color)
fmt.Printf("obj = %+v\n", obj)
p.color = "purple"
fmt.Printf("p.color = %p\n", &p.color)
fmt.Printf("p = %+v\n", p)
fmt.Printf("obj = %+v\n", obj)
obj2 := *p
fmt.Printf("obj2 = %+v\n", obj2)
}
Ausgabe
0x10434120
&p.color = 0x10434120
&obj.color = 0x10434140 //different than &p.color!
obj = {color:tomato total:0}
p.color = 0x10434120
p = &{color:purple total:0}
obj = {color:tomato total:0}
obj2 = {color:purple total:0} // we get purple now when dereference again
gibt es eine Möglichkeit, den gleichen dereferenzierten Zeiger auf p zu bekommen? Wie im main() - func, wenn wir die Struktur als Slice anhängen, müssen wir sie immer im Append selbst dereferenzieren, d. h. res = append (res, * p). – ken
Es geht nicht nur um "Erstellen" einer neuen Variablen, die Zuweisung zu einer vorhandenen Variablen über eine Dereferenzierung kopiert den Wert, z. '* a = * b' kopiert immer noch' * b' nach '* a'. – JimB
@jimB yap, gibt es eine Möglichkeit, die wiederholte Kopie zu vermeiden? im Grunde muss die Operation nur mit der gleichen p struct umgehen. – ken