Heim >Backend-Entwicklung >Golang >Warum führen Vergleiche von Arrays von Zeigern auf leere Strukturen zu inkonsistenten Ergebnissen?
Warum ein Array-Vergleich mit leeren Strukturen zu unterschiedlichen Ergebnissen führt
Warum führt der Gleichheitsvergleich der Arrays zu einem gegebenen Array von Zeigern auf leere Strukturen? manchmal als wahr und manchmal als falsch bewerten?
Erforschung von Verhalten
package main import "fmt" type myStruct struct{} func main() { s, ss := myStruct{}, myStruct{} arr1 := [6]*myStruct{&s} arr2 := [6]*myStruct{&ss} fmt.Println(&s == &ss, arr1 == arr2) // Produces mixed results (e.g., false, true or true, false) l, ll := myStruct{A: 1}, myStruct{A: 1} arr3 := [6]*myStruct{&l} arr4 := [6]*myStruct{&ll} fmt.Println(&l == &ll, arr3 == arr4) // Always evaluates to false }
Erklärung
Die Go-Sprachspezifikation besagt, dass:
Dynamisches Verhalten und Escape-Analyse
Das Verhalten lässt sich erklären, indem man die vom Go-Compiler durchgeführte Escape-Analyse berücksichtigt.
Auswirkungen
Das obige ist der detaillierte Inhalt vonWarum führen Vergleiche von Arrays von Zeigern auf leere Strukturen zu inkonsistenten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!