¿Cuáles son los pros y los contras de escribir el backend en Go vs Erlang vs Python?

He usado los tres para varios proyectos y todos tienen los “bordes ásperos”.

Python era la versión 2, por lo que no estoy seguro de si V3 ha solucionado esto, pero Unicode / UTF-8 fue realmente difícil de corregir, básicamente UTF-8 a stdout estaría bien, pero cambiar a un archivo y fallaría con la conversión a Errores ASCII. La aplicación principal utilizaba Django: bastante fácil de poner en funcionamiento un sistema y estaba bien para consultas pequeñas, y fácil de escribir una consulta compleja.
la implementación es bastante fácil ya que no hay un paso de compilación y el servidor de desarrollo cuenta con recarga automática, lo cual es bueno. Contras: el modelo de objetos produciría un SQL increíblemente complejo que tardó unos minutos en ejecutarse y el back-end se agotaría, por lo que puede no ser adecuado para dicha aplicación, aunque agregar algunas funciones de SQL puede ser una forma de resolver esto.

Erlang es bastante agradable como lenguaje y tiene muchas bibliotecas, realizó varios proyectos y todos funcionan bien. Puede hacer que el sistema vuelva a cargar el nuevo código incluso en un sistema en ejecución. También puede manejar un gran número de conexiones. Los inconvenientes son que la sintaxis puede ser difícil de ajustar si proviene de un código imperativo y tenga cuidado con el uso de bibliotecas que cambian con frecuencia, por ejemplo, cambié a una biblioteca de servidor web diferente y la última versión modificó su convención de llamada API ha hecho necesario cambiar muchas fuentes. Se requiere un paso de compilación y la implementación requiere que se empaqueten muchos archivos. También tenga cuidado con las cadenas (= lista de caracteres Unicode de 32 bits) y los binarios (cadena de bytes codificada UTF-8): algunas bibliotecas usan una y otra la otra y encontré una biblioteca que usaba una lista de bytes UTF-8 (al igual que Python endedup con muchas llamadas de conversión)

Golang es probablemente más fácil si viene de C o Python y su biblioteca tiene un conjunto razonable de funciones. Es bastante fácil crear código multiproceso, aunque creo que debe pensar cómo usar los canales para comunicarse entre los hilos (en Erlang este es el valor predeterminado, pero ir aún permite el estado global). Requiere un paso de compilación, pero la implementación es solo un ejecutable único. Hasta ahora no he encontrado las sondas Unicode / UTF-8. Contras: es muy nuevo, por lo que a la biblioteca estándar todavía le faltan algunas características. Los canales son un poco difíciles de acertar, todavía estoy usando estado global y bloqueos para algunas cosas.

Diría que la elección de Django fue incorrecta para ese proyecto porque era más que solo una entrada / consulta de la base de datos y probablemente eso debería haberse dividido como otra cosa. Los otros proyectos también tenían otros componentes como PostgreSQL, Redis, MogoDB, Solr …

Sin embargo, una cosa a tener en cuenta son las bibliotecas externas, todo lo anterior hace que sea muy fácil extraer código arbitrario de Github y debe tener cuidado para estabilizar esto: ¿rastrea la biblioteca de Github directamente o bifurca y rastrea de esa manera? Es importante considerar esto para lidiar con cualquier actualización, especialmente en el código de Internet.

Actualmente recomendaría Golang (aunque preferiría un lenguaje funcional) ya que parece bastante sencillo de leer, usar e implementar.