Dans le langage Go, il n'y aura aucune erreur potentielle de compilation de déréférencement de pointeur nul. En effet, le langage Go évite le problème des pointeurs nuls de par sa conception. Lorsque vous déclarez une variable, elle est initialisée à une valeur nulle par défaut et non à un pointeur nul. Dans le même temps, le langage Go fournit également un riche mécanisme de gestion des erreurs, tel que l'utilisation de plusieurs valeurs de retour pour renvoyer des informations sur les erreurs et l'utilisation de defer et panic/recover pour gérer les exceptions. Ces fonctionnalités permettent au langage Go de détecter les erreurs potentielles de pointeur nul pendant la phase de compilation et de fournir un environnement de programmation plus sûr et plus fiable. Par conséquent, dans le langage Go, il n'y aura pas d'erreurs de compilation similaires au "déréférencement ptr nul".
Un collègue a déréférencé null ptr en go.
Je lui suggère de faire ce que je fais : lorsque je travaille dans d'autres langues, j'ai tendance à augmenter le niveau d'avertissement et à transformer les avertissements en erreurs. c# par exemple, ce qui veut dire que je n'arrive pas à compiler ce code :
private static string bad_deref(object? object) { return object.tostring(); }
Parce que je comprends
x.cs(y,z): [CS8602] Dereference of a possibly null reference.
Pour être clair, c’est plutôt bien.
Mais il m'a dit que go n'avait pas de niveau d'avertissement pour démarrer, et en le recherchant sur Google, il semble qu'il avait raison.
Alors comment résoudre ce problème en go ? Sommes-nous de retour au vieux conseil C « les bons programmeurs ne font pas d'erreurs » et si vous ne travaillez pas avec des personnes parfaites, des déréférencements nuls ptr se produiront parfois ?
C'est vrai : vous ne pouvez pas provoquer une erreur du compilateur en déréférençant un pointeur sans gérer le cas nil
. C'est parce que la spécification du langage le permet. Vous ne pouvez rien y faire.
Vous pouvez écrire du code erroné/incorrect dans n'importe quelle langue, le moyen de détecter les erreurs plus tôt ou de les atténuer est d'écrire des tests dans presque toutes les langues.
Go dispose d'un excellent go
cadre de test intégré à l'outil lui-même. Il faut absolument en profiter. Écrivez des tests en déplacement. Les tests Go doivent être exécutés régulièrement, ils s'exécutent automatiquement pendant CI/CD et avant les versions. La plupart des IDE exécuteront également automatiquement les tests enregistrés.
Une autre astuce que vous pouvez utiliser : si nil
指针没有意义,请编写一个使用非指针类型的 API。当然这有其缺点(有时指针是必须的);如果使用指针更有意义,请使用它,但检查 nil
值,并正确处理它们(例如返回 error
,如果有意义则恐慌等)。还要编写测试来使用 nil
les pointeurs n'ont pas de sens, écrivez une API qui utilise des types non-pointeurs. Bien sûr, cela a ses inconvénients (parfois des pointeurs sont nécessaires) ; si l'utilisation d'un pointeur a plus de sens, utilisez-le, mais vérifiez les valeurs
erreur
, ou paniquez si cela se produit). c'est logique d'attendre). Écrivez également des tests pour tester en utilisant les valeurs du pointeur 🎜. 🎜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!