Maison > développement back-end > Golang > le corps du texte

Puis-je obtenir une erreur de compilation avec un déréférencement potentiel nul ptr dans Go ?

WBOY
Libérer: 2024-02-08 21:50:21
avant
751 Les gens l'ont consulté

在 Go 中,我可能会遇到潜在的 null ptr 取消引用的编译错误吗?

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".

Contenu de la question

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();
}
Copier après la connexion

Parce que je comprends

x.cs(y,z): [CS8602] Dereference of a possibly null reference.
Copier après la connexion

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 ?

Solution de contournement

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 gocadre 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

et gérez-les correctement (par exemple, renvoyez 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!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!