Routing per host sopra net/http: gruppi di rotte, middleware, rotte con nome, router montati e pagine not-found, con middleware per log, header di sicurezza, compressione e cache dell'output.
go-webthings è una famiglia di pacchetti mirati per applicazioni Go renderizzate sul server che vogliono comunque essere reattive. I pezzi restano piccoli: il routing è routing, ciò che serve a un template è documentato e il rendering parziale è esplicito.
Lavori con il normale net/http e normali file html/template, e ottieni aggiornamenti che funzionano bene con HTMX, senza fare del browser l'applicazione principale.
go-router instrada la richiesta, go-clue descrive ciò che un template si aspetta, e go-partial rende una pagina intera o solo un frammento HTMX.
Routing per host sopra net/http: gruppi di rotte, middleware, rotte con nome, router montati e pagine not-found, con middleware per log, header di sicurezza, compressione e cache dell'output.
Contratti tipizzati e metadati per l'editor per i file html/template. I template restano semplici, mentre l'editor può completare, navigare e segnalare errori di accesso al modello.
Rende pagine intere o solo la parte necessaria dagli stessi template: aggiornamenti HTMX mirati, swap out-of-band, selezioni, azioni e regioni riutilizzabili, senza fare dell'HTML un dialetto a componenti.
Moduli, traduzioni e preparazione degli asset seguono lo stesso approccio: tipi Go espliciti e HTML al primo posto. Ogni pacchetto si può usare anche da solo.
Moduli HTML tipizzati dai tag delle struct, con mappatura degli invii, convalida dei campi, temi configurabili, metadati della richiesta e protezione CSRF.
Prepara in fase di build versioni fissate di pacchetti JavaScript e CSS con un lock file, le incorpora, le serve con URL versionati e Subresource Integrity, e genera import map e tag per i fogli di stile.
Cataloghi PO di gettext con la lingua per ogni richiesta, forme plurali, contesti di traduzione ed estrazione delle chiavi letterali dai template Go.
La libreria Go go-webthings fa funzionare il backend di un sito, costruito con questi pacchetti. Il tuo sito è un piccolo programma Go: tu porti i template e scegli i moduli. Il risultato è un unico binario, che gira su SQLite senza altri servizi, oppure su PostgreSQL o MySQL.
app := webthings.New(webthings.Config{
Name: "My site",
Locales: locales.Config{
Default: "en",
Enabled: []string{"en", "nl"},
},
Templates: os.DirFS("templates"),
})
err := app.Use(
publishing.Module("news", "News"),
events.Module("agenda", "Agenda"),
)
if err != nil {
log.Fatal(err)
}
err = app.ListenAndServe(ctx, ":8080")
Aggiungi un modulo con una riga: arrivano con lui le sezioni di amministrazione, le pagine, le funzioni per i template e le tabelle del database. I moduli inclusi usano solo l'API pubblica, quindi un modulo tuo può fare tutto ciò che fanno loro.