Heim > Backend-Entwicklung > Golang > Wie weist man einem Int-Zeiger in Go einen Wert korrekt zu?

Wie weist man einem Int-Zeiger in Go einen Wert korrekt zu?

Susan Sarandon
Freigeben: 2024-12-15 17:50:14
Original
334 Leute haben es durchsucht

How to Correctly Assign a Value to an Int Pointer in Go?

Einen Int-Zeiger auf einen Int-Wert in Go setzen

In Go besteht eine häufige Aufgabe darin, einem Int-Zeiger einen Wert zuzuweisen. Ein kürzlich entdeckter Fehler in einem Codeausschnitt wirft jedoch Licht auf eine mögliche Falle:

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var guess *int
    fmt.Println(reflect.TypeOf(guess))
    *guess = 12345
    fmt.Println(guess)
}
Nach dem Login kopieren

Beim Ausführen dieses Codes tritt der folgende Fehler auf:

Type: *int
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x483c7d]

goroutine 1 [running]:
main.main()
    /home/aaron/projects/gopath/src/github.com/AaronNBrock/go-guess/main.go:16 +0x9d
exit status 2
Nach dem Login kopieren

Die Ursache liegt in die Tatsache, dass die Zeigerschätzung zunächst auf Null gesetzt ist. Das Dereferenzieren eines Nullzeigers löst einen Laufzeitfehler aus, wie in der Fehlermeldung zu sehen ist. Die Lösung besteht darin, dem Zeiger Speicher zuzuweisen, bevor versucht wird, ihm einen Wert zuzuweisen:

var guess *int
guess = new(int)
*guess = 12345
Nach dem Login kopieren

Diese Modifikation stellt sicher, dass Guess auf einen gültigen Speicherort verweist, sodass wir seinen Wert festlegen und abrufen können.

Alternativ kann die Verwendung einer kurzen Variablendeklaration den Code vereinfachen:

guess := new(int)
*guess = 12345
Nach dem Login kopieren

Ein anderer Ansatz besteht darin, die Adresse einer vorhandenen Variablen dem zuzuweisen Zeiger:

value := 12345 // will be of type int
guess := &value
Nach dem Login kopieren

Diese Lösung verweist auf eine vorhandene Variable, anstatt neuen Speicher zuzuweisen. Durch das Ändern des Zeigerwerts wird auch der Wert der ursprünglichen Variablen geändert.

Bedenken Sie abschließend, dass das Zeigen eines Zeigers auf eine Position und das Zuweisen eines Werts zu dieser unterschiedliche Vorgänge sind. Ersteres weist Speicher zu oder setzt den Zeiger auf eine vorhandene Variable, während letzteres den an der angegebenen Stelle gespeicherten Wert ändert.

Das obige ist der detaillierte Inhalt vonWie weist man einem Int-Zeiger in Go einen Wert korrekt zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage