Heim >Backend-Entwicklung >Golang >golang: ungültige Speicheradresse oder Null-Zeiger-Dereferenzierung
Der PHP-Editor Xiaoxin ist hier, um eine häufige Fehlermeldung einzuführen: „golang: Ungültige Speicheradresse oder Nullzeiger-Dereferenzierung“. Bei der Entwicklung von Anwendungen mit der Programmiersprache Golang tritt dieser Fehler manchmal auf. Er weist normalerweise darauf hin, dass im Code eine ungültige Speicheradresse oder ein Nullzeiger dereferenziert wurde. Dieser Fehler kann zum Absturz des Programms oder zu unvorhersehbarem Verhalten führen. Als Nächstes werden wir einige häufige Ursachen und Lösungen untersuchen, die diesen Fehler verursachen können, um Entwicklern zu helfen, dieses Problem besser zu verstehen und zu lösen.
Führen Sie mich aus
Jetzt habe ich ein Programm namens HelloWorld
und die Projektstruktur ist
aaa.go
package aaa import ( "HelloWorld/test/bbb" ) var aa = bbb.Bb func World() { aa.Hello() }
bbb.go
package bbb import "HelloWorld/test/ccc" var Bb *ccc.Config
ccc.go
package ccc import "fmt" type Config struct { C int } func ConfigInit() *Config { return &Config{C: 10} } func (c *Config) Hello() { fmt.Println(c.C) }
main.go
package main import ( "HelloWorld/test/aaa" "HelloWorld/test/bbb" "HelloWorld/test/ccc" ) func init() { bbb.Bb = ccc.ConfigInit() } func main() { aaa.World() }
Wenn ich jetzt das Programm starte, wird es angezeigt panic: 运行时错误:无效的内存地址或 nil 指针取消引用
Aber als ich mich verändert habe main.go
import ( "HelloWorld/test/bbb" "HelloWorld/test/ccc" ) func init() { bbb.Bb = ccc.ConfigInit() } func main() { // aaa.World() var aa = bbb.Bb aa.Hello() }
kann den korrekten Wert ausgeben10
Ich weiß nicht, warum die Definition in bbb.go
中的定义var aa = bbb.Bb
var aa = bbb.Bb
falsch ist
Ich verstehe nicht, warum es ein Nullzeiger ist
Wenn Sie sich das Bild oben ansehen, zeigt es den Import- und Variableninitialisierungsablauf. Nun, im ersten Fall aaa.world
。 world 函数中的变量 nil
被设置为 nil
,因为即使在 main 中的 init 函数运行之前,一旦 init 运行 bb
就指向有效内存,但在此之前,包 bbb
中的 bb 从未被初始化。让我们考虑第二种情况,这里init函数也给了bb一个有效的内存,但这里的问题是aa
被重新分配给bb,它指向有效的内存,分配后aa
gilt das Gleiche.
Das obige ist der detaillierte Inhalt vongolang: ungültige Speicheradresse oder Null-Zeiger-Dereferenzierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!