Heim >Backend-Entwicklung >Golang >Könnte bei einer potenziellen Null-PTR-Dereferenzierung in Go ein Kompilierungsfehler auftreten?
In der Go-Sprache gibt es keine potenziellen Fehler bei der Kompilierung der Nullzeiger-Dereferenzierung. Dies liegt daran, dass die Go-Sprache das Problem von Nullzeigern von vornherein vermeidet. Wenn Sie eine Variable deklarieren, wird sie standardmäßig auf einen Nullwert und nicht auf einen Nullzeiger initialisiert. Gleichzeitig bietet die Go-Sprache auch einen umfassenden Mechanismus zur Fehlerbehandlung, z. B. die Verwendung mehrerer Rückgabewerte zur Rückgabe von Fehlerinformationen und die Verwendung von „Defer“ und „Panic/Recover“ zur Behandlung von Ausnahmen. Diese Funktionen ermöglichen es der Go-Sprache, potenzielle Nullzeigerfehler während der Kompilierungsphase zu erkennen und eine sicherere und zuverlässigere Programmierumgebung bereitzustellen. Daher treten in der Go-Sprache keine Kompilierungsfehler auf, die der „Null-PTR-Dereferenzierung“ ähneln.
Ein Kollege hat null ptr in go dereferenziert.
Ich schlage vor, dass er tut, was ich tue – wenn ich in anderen Sprachen arbeite, neige ich dazu, die Warnstufe zu erhöhen und Warnungen in Fehler umzuwandeln. c# zum Beispiel, was bedeutet, dass ich diesen Code nicht kompilieren kann:
private static string bad_deref(object? object) { return object.tostring(); }
Weil ich es verstehe
x.cs(y,z): [CS8602] Dereference of a possibly null reference.
Um es klar zu sagen: Das ist ziemlich gut.
Aber er sagte mir, dass es für Go keine Warnstufe gibt, und beim Googeln schien er Recht zu haben.
Wie kann man dieses Problem in Go lösen? Sind wir wieder beim alten C-Ratschlag „Gute Programmierer machen keine Fehler“ und wenn man nicht mit perfekten Leuten arbeitet, kommt es manchmal zu Null-PTR-Dereferenzierungen?
Das ist richtig: Sie können keinen Compilerfehler verursachen, indem Sie einen Zeiger dereferenzieren, ohne den nil
-Fall zu berücksichtigen. Das liegt daran, dass die Sprachspezifikation dies zulässt. Dagegen kann man nichts machen.
Sie können in jeder Sprache falschen/falschen Code schreiben. Die Möglichkeit, Fehler frühzeitig zu erkennen oder zu mildern, besteht darin, Tests in fast jeder Sprache zu schreiben.
Go verfügt über ein großartiges go
Test-Framework, das in das -Tool selbst integriert ist. Das sollten Sie unbedingt nutzen. Schreiben Sie Tests unterwegs. Go-Tests sollten regelmäßig durchgeführt werden, sie laufen automatisch während CI/CD und vor Veröffentlichungen. Die meisten IDEs führen auch gespeicherte Tests automatisch aus.
Ein weiterer Trick, den Sie verwenden können: Wenn nil
指针没有意义,请编写一个使用非指针类型的 API。当然这有其缺点(有时指针是必须的);如果使用指针更有意义,请使用它,但检查 nil
值,并正确处理它们(例如返回 error
,如果有意义则恐慌等)。还要编写测试来使用 nil
Zeiger keinen Sinn ergeben, schreiben Sie eine API, die Nicht-Zeigertypen verwendet. Natürlich hat dies seine Nachteile (manchmal sind Zeiger notwendig); wenn die Verwendung eines Zeigers sinnvoller ist, verwenden Sie ihn, aber prüfen Sie, ob
error
zurückgeben oder Panik, wenn dies der Fall ist). macht Sinn, warten). Schreiben Sie auch Tests zum Testen mit 🎜 Zeigerwerten. 🎜Das obige ist der detaillierte Inhalt vonKönnte bei einer potenziellen Null-PTR-Dereferenzierung in Go ein Kompilierungsfehler auftreten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!