L'éditeur php Xiaoxin est là pour introduire un message d'erreur courant : "golang : adresse mémoire invalide ou déréférencement de pointeur zéro". Lors du développement d'applications à l'aide du langage de programmation Golang, vous rencontrez parfois cette erreur. Elle indique généralement qu'une adresse mémoire non valide ou un pointeur zéro est déréférencé dans le code. Cette erreur peut provoquer le blocage du programme ou produire un comportement imprévisible. Ensuite, nous explorerons certaines causes courantes et solutions pouvant provoquer cette erreur pour aider les développeurs à mieux comprendre et résoudre ce problème.
Exécutez-moi
Maintenant, j'ai un programme appelé HelloWorld
et la structure du projet est
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() }
Maintenant, lorsque j'exécuterai le programme, il apparaîtra panic: 运行时错误:无效的内存地址或 nil 指针取消引用
Mais quand je change 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() }
peut afficher la valeur correcte10
Je ne sais pas pourquoi la définition dans bbb.go
中的定义var aa = bbb.Bb
var aa = bbb.Bb
est incorrecte
Je ne comprends pas pourquoi il s'agit d'un pointeur nul
Si vous regardez l'image ci-dessus, elle montre le flux d'importation et d'initialisation des variables. Maintenant, dans le premier cas aaa.world
。 world 函数中的变量 nil
被设置为 nil
,因为即使在 main 中的 init 函数运行之前,一旦 init 运行 bb
就指向有效内存,但在此之前,包 bbb
中的 bb 从未被初始化。让我们考虑第二种情况,这里init函数也给了bb一个有效的内存,但这里的问题是aa
被重新分配给bb,它指向有效的内存,分配后aa
c’est la même chose.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!