Ich möchte dieses Verhalten in Golang, erläutern, warum, wenn Sie die Speicherreferenz auf Array nehmen und Werte von dieser Referenz ändern Sie nichts in der referenzierenden Array ändern.Golang Array Pointer
Ein Beispiel:
var t [5]int
printType(t,"t")
p := &t
printType(p,"p")
x := *p
x[0] = 4
printType(x,"x")
printType(p,"p")
printType(t,"t")
Dieser Code Rückkehr
[t] Type:[5]int Kind:array Adr:%!p([5]int=[0 0 0 0 0]) Value:([0 0 0 0 0])
[p] Type:*[5]int Kind:ptr Adr:0xc4200142d0 Value:(&[0 0 0 0 0])
[x] Type:[5]int Kind:array Adr:%!p([5]int=[4 0 0 0 0]) Value:([4 0 0 0 0])
[p] Type:*[5]int Kind:ptr Adr:0xc4200142d0 Value:(&[0 0 0 0 0])
[t] Type:[5]int Kind:array Adr:%!p([5]int=[0 0 0 0 0]) Value:([0 0 0 0 0])
können Sie die Speicheradresse sehen ist die gleiche, aber der Wert "4" ist nicht vorhanden.
Methode Printtype
func printType(i interface {},message string) {
k := reflect.TypeOf(i).Kind().String()
fmt.Printf("[%s] Type:%T Kind:%s Adr:%[2]p Value:(%[2]v)\n",message,i,k)
}