Kann man assert in Go verwenden? Oder ist es so böse, wie man über C++ sagt?
Hallo zusammen! Ich bin neu in Go und komme von C++. Dort habe ich oft assert() verwendet, um Vorbedingungen und Invarianten zu prüfen – zum Beispiel, dass ein Zeiger nicht nil ist, dass der Index innerhalb des Arrays liegt oder dass der Zustand eines Objekts korrekt ist. Das hat beim Debuggen sehr geholfen.
Ich habe angefangen, in Go zu schreiben, und bemerkt, dass es in der Standardbibliothek keine assert-Funktion gibt. Natürlich gibt es das Paket testing, aber das ist nur für Tests. Im Produktionscode habe ich angefangen, eigene Prüfungen zu schreiben wie:
```go
if somePtr == nil {
panic("somePtr is nil, das ist ein Bug!")
}
```
Aber ein Kollege sagte, das sei ein schrecklicher Stil und dass es in Go üblich sei, Fehler zurückzugeben, statt zu panicken. Er nannte ein Beispiel aus C++, wo assert oft dafür kritisiert wird, dass es durch das Makro NDEBUG deaktiviert werden kann, was zu versteckten Bugs führt.
Jetzt bin ich verwirrt. Einerseits ist assert in C++ eine bequeme Möglichkeit, Annahmen zu dokumentieren und zu prüfen. Andererseits ist die Fehlerbehandlungskultur in Go ganz anders. Frage: Sollte man überhaupt assert-ähnliche Konstrukte in Go verwenden? Wenn ja,