Zugriffsmethoden vs. Dereferenzierung zum Debuggen
In diesem Codeausschnitt drucken Sie den Wert eines Strukturfelds, das ein Zeiger ist zu einer anderen Struktur. Die Ausgabe ist die Speicheradresse der Struktur, auf die verwiesen wird, nicht der tatsächliche Wert.
package main import "fmt" type SomeStruct struct { somePointer *somePointer } type somePointer struct { field string } func main() { fmt.Println(SomeStruct{&somePointer{"I want to see what is in here"}}) }
Zu Debugging-Zwecken ist es vorzuziehen, den tatsächlichen Wert des Feldes auszudrucken. Es gibt zwei Möglichkeiten, dies zu erreichen: Zugriffsmethoden verwenden oder den Zeiger dereferenzieren.
Zugriffsmethoden
Sie können für jedes Zeigerfeld Getter-Methoden erstellen, um den tatsächlichen Wert abzurufen . Zum Beispiel:
func (s SomeStruct) GetFieldValue() string { if s.somePointer == nil { return "" } return s.somePointer.field }
Dann können Sie in Ihrem Code die Getter-Methode aufrufen, um den Wert zu drucken:
fmt.Println(SomeStruct{&somePointer{"I want to see what is in here"}}.GetFieldValue())
Mit diesem Ansatz können Sie die Formatierung der Ausgabe steuern und bietet eine bequeme Möglichkeit, auf den Feldwert zuzugreifen, ohne dass eine Dereferenzierung erforderlich ist.
Dereferenzierung
Wenn Sie den Zeiger lieber direkt dereferenzieren möchten, können Sie die folgende Syntax verwenden:
fmt.Println(*SomeStruct{&somePointer{"I want to see what is in here"}}.somePointer)
Dieser Ansatz erfordert jedoch Vorsicht, da die Dereferenzierung eines Nullzeigers zu einer Laufzeitpanik führen kann. Aus Sicherheitsgründen wird empfohlen, Getter-Methoden zu verwenden, es sei denn, Sie sind sicher, dass der Zeiger ungleich Null ist.
Das obige ist der detaillierte Inhalt vonZugriffsmethoden vs. Dereferenzierung: Was ist besser für das Debuggen von Zeigerfeldern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!