¿Se puede usar assert en Go? ¿O es malo, como dicen de C++?
¡Hola a todos! Soy nuevo en Go, vengo de C++. Allí usaba a menudo assert() para verificar precondiciones e invariantes — por ejemplo, que un puntero no sea nil, que un índice esté dentro del array, o que el estado del objeto sea correcto. Esto ayudaba mucho en la depuración.
Empecé a escribir en Go y noté que en la biblioteca estándar no hay función assert. Por supuesto, existe el paquete testing, pero solo para tests. En código de producción empecé a escribir mis propias verificaciones como:
```go
if somePtr == nil {
panic("somePtr es nil, ¡esto es un bug!")
}
```
Pero un colega dijo que esto es un estilo horrible, y que en Go se acostumbra a devolver errores, no a generar pánicos. Puso el ejemplo de C++, donde a menudo se critica a assert porque puede ser desactivado con la macro NDEBUG, lo que lleva a bugs ocultos.
Ahora estoy confundido. Por un lado, assert en C++ es una forma conveniente de documentar y verificar suposiciones. Por otro lado, en Go la cultura de manejo de errores es completamente diferente. La pregunta: ¿vale la pena usar construcciones similares a assert en Go? Si es así, ¿