Blaze
Un template minimale in Go per servizi HTTP veloci e mantenibili, costruito interamente sulla standard library.
Blaze è un punto di partenza per scrivere backend in Go: struttura del progetto, gestione degli errori HTTP, validazione delle richieste, logging strutturato e un esempio reale di CRUD API già funzionante. Si clona, si esegue make, e si ha un servizio che parte.
L'idea alla base è deliberatamente conservativa: tutto poggia su net/http, la libreria standard di Go. Niente framework, niente astrazioni proprietarie, nessun componente che non si possa sostituire.
Il problema dei framework
Scegliere un framework per un servizio backend significa accettare un vincolo che durerà quanto il progetto. Router, middleware, handler, contesto della richiesta: una volta scritti nel dialetto di un framework, non sono più codice Go, sono codice di quel framework. Cambiarlo, o anche solo sostituire un pezzo, significa riscrivere.
È un costo che si paga tardi e tutto insieme: quando il framework rallenta lo sviluppo, quando smette di essere mantenuto, quando serve una libreria che non si integra bene, quando qualcuno nuovo nel team deve imparare le convenzioni prima di poter leggere il codice.
La scelta: solo standard library
Blaze non introduce nessuna astrazione sopra net/http. Gli handler sono handler standard, i middleware sono middleware standard, le interfacce sono quelle che ogni sviluppatore Go già conosce.
La conseguenza pratica è che ogni componente è intercambiabile. Il router incluso è chi, scelto proprio perché compatibile con net/http: sostituirlo con un altro router, o con nient'altro che la standard library, non richiede di toccare gli handler. Lo stesso vale per il logger, per la validazione, per lo storage. Le dipendenze sono quattro in totale, tutte rimpiazzabili in isolamento.
È anche la ragione per cui il codice risulta leggibile da subito: non c'è nulla di magico da capire prima di poter contribuire. Chi conosce Go conosce già Blaze.
Performance
Non c'è nessun layer di indirezione tra la richiesta e l'handler, quindi non c'è overhead da pagare: le performance sono quelle di net/http, che in Go è già una delle implementazioni HTTP più veloci disponibili in una libreria standard. Un framework, nel migliore dei casi, può solo avvicinarsi a quel numero.
Il binario compilato è autosufficiente e non richiede runtime esterni. Il supporto AWS Lambda è disponibile su un branch dedicato, senza modifiche al codice applicativo.
Cosa include
Struttura convenzionale con separazione netta tra logica di business e logica API, mappatura degli errori di servizio in errori HTTP, validazione dei payload, logging strutturato con zerolog, linting rigoroso configurato. L'esempio incluso implementa una CRUD API completa con storage sqlite3 e migrazioni SQL applicate all'avvio.
Open source
Blaze è rilasciato con licenza MIT ed è utilizzabile come template GitHub: si parte da un repository già impostato, senza scaffolding da configurare.