Go es un lenguaje de programación eficiente y rápido para construir APIs y microservicios.
Aquí te propongo una estructura de carpetas en Go para tu proyecto.
Estructura para Go
project/ ├── config/ # Configuración ├── controllers/ # Controladores ├── models/ # Modelos de datos ├── routes/ # Rutas de la API ├── schemas/ # Esquemas o validaciones de datos ├── utils/ # Utilidades y funciones auxiliares └── main.go # Punto de entrada de la aplicación
Desglose y Función de Cada Carpeta
config/
: Aquí puedes definir las configuraciones de la aplicación, como variables de entorno, configuraciones de la base de datos, etc. Puedes crear un archivo comoconfig.go
que maneje estas configuraciones, cargándolas de un archivo.env
o de variables de entorno.controllers/
: Este directorio sería el equivalente acrud/
, ya que en Go es común separar la lógica de negocio en «controladores» o «servicios». Aquí defines las funciones CRUD que interactúan con la base de datos o con otros servicios, que luego son utilizadas en las rutas.models/
: Aquí defines los modelos de datos, que en Go suelen representarse constructs
. Puedes usar estos modelos junto con GORM o con otra ORM para interactuar con la base de datos.routes/
: En Go, puedes definir las rutas de la API en esta carpeta. Crea un archivoroutes.go
donde registras los endpoints y asocias cada ruta a sus controladores correspondientes. Puedes usar un enrutador comomux
para facilitar el enrutamiento de las rutas.schemas/
: En Go, los esquemas de validación suelen ser más limitados que en Python debido a la naturaleza del lenguaje. Sin embargo, puedes usar esta carpeta para definir «data transfer objects» (DTOs) o cualquier otra estructura de datos de entrada/salida que desees validar. Las bibliotecas comogo-playground/validator
pueden ayudarte a realizar validaciones.utils/
: Aquí puedes almacenar utilidades o funciones auxiliares, como generadores de JWT, funciones de hashing, o cualquier lógica que no encaje en los controladores ni en los modelos.main.go
: Este archivo es el punto de entrada de la aplicación, donde se inicializa la configuración, se registran las rutas y se inicia el servidor.
Ejemplo Básico de Código
main.go
package main import ( "log" "net/http" "project/config" "project/routes" ) func main() { // Cargar configuración config.LoadConfig() // Configurar rutas r := routes.SetupRouter() // Iniciar servidor port := ":8080" log.Println("Servidor escuchando en el puerto", port) log.Fatal(http.ListenAndServe(port, r)) }
config/config.go
package config import ( "log" "os" ) var DB_URL string func LoadConfig() { // Ejemplo de cargar una variable de entorno DB_URL = os.Getenv("DB_URL") if DB_URL == "" { log.Fatal("DB_URL no definido") } }
models/item.go
package models type Item struct { ID int `json:"id"` Name string `json:"name"` Price float64 `json:"price"` }
controllers/item_controller.go
package controllers import ( "encoding/json" "net/http" "project/models" ) var items = []models.Item{ {ID: 1, Name: "Item 1", Price: 10.5}, {ID: 2, Name: "Item 2", Price: 20.0}, } func GetItems(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(items) }
routes/routes.go
package routes import ( "net/http" "github.com/gorilla/mux" "project/controllers" ) func SetupRouter() *mux.Router { r := mux.NewRouter() // Definir rutas r.HandleFunc("/items", controllers.GetItems).Methods("GET") return r }
Inicializar el proyecto en Go
Para comenzar el proyecto, puedes iniciar un nuevo módulo de Go en la carpeta project
con el siguiente comando:
go mod init project
Luego, puedes instalar dependencias (como el enrutador mux
) usando:
go get -u github.com/gorilla/mux
Ejecución
Para ejecutar la aplicación, usa:
go run main.go
Esta estructura te permitirá organizar mejor tu código y crear una API en Go con una estructura modular, similar a lo que estás acostumbrado en FastAPI.
Ingeniero en Informática, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.