Desde Go 1.22, la biblioteca estándar ofrece mejor soporte para routing
- Antes había que manejar el routing manualmente, pero ahora se puede hacer de forma simple con
mux.HandleFunc
- También se puede agregar middleware de inicio de sesión para reforzar la seguridad
Precaución con el router integrado: redirecciones por la barra final
- Si creas la ruta
/records/, una solicitud a /records será redirigida a /records/
- Esto puede provocar que el cuerpo de una solicitud POST se elimine y se convierta en una solicitud GET
- La solución es usar endpoints de API como
POST /records en lugar de POST /records/
Generación automática de código de consultas a base de datos con sqlc
- Encontró la herramienta
sqlc, que permite escribir consultas SQL sin tener que aprender un ORM
- Al escribir consultas SQL, se convierten automáticamente a código Go
- Hace posible escribir fácilmente las consultas SQL necesarias sin tener que revisar la documentación de un ORM
Consejos de optimización para sqlite
- Usar un objeto de base de datos solo para escritura y configurar
db.SetMaxOpenConns(1)
- Para mejorar la velocidad de lectura, usar objetos de BD separados para escritura y lectura
- Dos tablas que no necesiten
JOIN pueden ponerse en bases de datos separadas y conectarse de forma independiente
Configuración del límite de memoria del GC en Go 1.19
- Al ejecutar todos los proyectos de Go en una VM con relativamente poca memoria, como 256 MB o 512 MB, surgía el problema de que la aplicación terminaba continuamente por OOM
- Debido a la configuración predeterminada del recolector de basura, se permite asignar memoria hasta 2 veces el tamaño actual del heap
- En Go 1.19 se añadió una forma de indicar que el GC se ejecute cuando la aplicación alcance cierto uso de memoria
- Después de establecer el límite de memoria del GC en 250 MB, disminuyó la frecuencia de cierres por OOM
export GOMEMLIMIT=250MiB
Por qué crear sitios web con Go
- Se despliega fácilmente como un único binario estático
- Incluye un servidor web integrado apto para producción, por lo que no hace falta configurar WSGI u otros componentes
- La toolchain de Go es fácil de instalar y usar
- Enviar respuestas HTTP es simple, lo que facilita el mantenimiento del proyecto
- La biblioteca estándar incluye
net/http, así que se pueden crear sitios web sin instalar librerías adicionales
- También permite realizar con facilidad tareas a nivel de sistema
- Da la impresión de que todo está hecho para que el proyecto sea fácil de manejar
Problemas que aún no ha resuelto
- Cosas que todavía no ha hecho mucho en Go
- Renderizado de plantillas HTML
- Implementar un sistema real de inicio de sesión
- Implementar CSRF
- En general, como no sabe bien cómo implementar funciones sensibles de seguridad, evita empezar proyectos que requieran login/CSRF y similares
Es genial ver las nuevas funciones de Go
- Las dos funciones de Go mencionadas en este texto (
GOMEMLIMIT y el routing) fueron agregadas en los últimos años
- Parece que debería prestar más atención a las notas de lanzamiento de las nuevas versiones de Go
2 comentarios
sqlces realmente excelente.Opinión de Hacker News
embedContextal bucle de transacciones para permitir su cancelaciónsqlctiene algunas limitaciones importantes y pequeñas incomodidades, así que conviene revisar la lista de issues antes de usarloGOMAXPROCSpara evitar el throttling de CPUGOMEMLIMITpuede reducir la preocupación por el GChtml/templatees extraño y tiene muchos problemas, así que es mejor no usarloTemplmux, pero no habían prestado atención a las funciones de los lanzamientos recientesnilhace que hasta las tareas simples se vuelvan complejasBEGIN CONCURRENT