¿Cuál es la forma preferida de estructurar las aplicaciones web de Golang?

Sé que fui yo quien hizo esta pregunta, busqué mucho para descubrir cómo estructurar mejor mis aplicaciones go. Solo quiero compartir lo que aprendí.

Tengo muchos blogs rojos, tres de ellos son los siguientes:

  • Ve las mejores prácticas, seis años después – por Peter Bourgon
  • Estructurando aplicaciones en Go – por Ben Johnson
  • Diseño de paquete estándar – también por Ben Johnson

Le sugiero que lea estos artículos para obtener más información sobre la estructuración de las aplicaciones go.

Creé una aplicación de muestra para demostrar cómo estructuré mis aplicaciones go.

La aplicación se llama my-app :

La carpeta pkg contiene los paquetes que usará para sus aplicaciones. Estos paquetes envuelven sus dependencias , por ejemplo, en su paquete de sesiones , puede usar paquetes externos para administrar sus sesiones, por ejemplo, puede usar gorilla / sessions. Aquí está el contenido de sessions.go ( my-app / pkg / sessions / sessions.go) :

Luego, en su paquete principal ( my-app / cmd / my-app / main.go ), solo necesitará importar sus propios paquetes. Esto te da más flexibilidad.

También eché un vistazo a Docker en GitHub, (archivo docker.go), lo más probable es que hagan la misma forma de estructuración.

Espero que esto sea útil 🙂

Editar : Ah, por cierto, Quora User contribuyó mucho en esta pregunta. Aprendí mucho sobre otras cosas como Docker , Kubernetes y microservicios que no sabía antes de que respondiera esta pregunta.

Editar : Sé que me he perdido mucho de mi respuesta. Soy relativamente nuevo en Go. Me alegraría si alguien señalara lo que me estoy perdiendo aquí 🙂

Hay muchas cosas que podrían significar esto. Aquí hay algunas interpretaciones:

  • Ir a la estructura del directorio. La página de inicio de Go tiene algunas ideas al respecto. Este stackoverflow tiene algunos otros pensamientos.
  • Manejo de solicitudes HTTP y conceptos básicos de la aplicación web? Nuevamente, la página de inicio de Go tiene un excelente artículo sobre los conceptos básicos.
  • Topología Quizás desarrolle su aplicación como un microservicio. Por lo tanto, querrás algo como Kubernetes, Docker Swarm o Mesos para administrar tu configuración. (divulgación completa: trabajo en Kubernetes, así que soy parcial con Kubernetes, pero cualquiera de estos tres son excelentes para administrar su topología).

Tal vez se pregunte: “¿Qué hacer en la práctica? ¿Qué bibliotecas usan? ”Bueno, es variado, pero en general, como la filosofía del lenguaje en sí, veo personas que lo mantienen simple. Muchos confían en el Cliente / Servidor HTTP en la biblioteca estándar. Personalmente, comencé a usar GRPC y GRPC-Gateway para definir las API.