Avatar ·

¿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í, ¿