Sujunk ir aptarnauk — static, handlers, router, main
Keturi failai kaip skirtukai, priklausomybių tvarka: static/embed.go → handlers.go → router.go → main.go — įterpk išteklius, atvaizduok šabloną, aptarnauk /static, sujunk main. Paskutiniai trys — tavo 1 pamokos failų pakeitimai: diff rodo tik pakeistas eilutes, visa kita perkelta.
1. static/embed.go (naujas) — padaro išteklius dvejetainio dalimi:
//go:embed assets
var FS embed.FS
CSS ir vietinis htmx gyvena po static/assets/css/style.css ir static/assets/js/htmx.min.js. Šie du — pateikti ištekliai — šis kursas moko Go ir HTML, tad stilių lapas ateina su starteriu (kaip dizaino sistema, kurią gautum darbe); gali jį laisvai keisti. //go:embed įkepa juos į sukompiliuotą dvejetainį, tad nėra atskiro išteklių aplanko, kurį diegti.
2. internal/handlers/handlers.go (modify) — Home dabar atvaizduoja šabloną. Vienintelė pakeista funkcija:
func (h *Handlers) Home(w http.ResponseWriter, r *http.Request) {
render(w, r, http.StatusOK, web.Home())
}
Neapdorotos eilutės fmt.Fprint nebėra; su ja — ir fmt importas, o vietoj jo importuojamas web. Health ir struktūra nepakito.
3. internal/handlers/router.go (modify) — vienas naujas maršrutas ir vienas naujas parametras:
func (h *Handlers) Router(staticFS fs.FS) http.Handler { // ← dabar ima išteklių FS
// ... tie patys middleware ...
r.Handle("/static/*", http.StripPrefix("/static/", http.FileServer(http.FS(staticFS))))
// ... / ir /healthz nepakito ...
}
4. cmd/signflow/main.go (modify) — išgauk po-FS ir paduok jį maršrutizatoriui:
staticFS, err := fs.Sub(static.FS, "assets") // atveria static/assets adresu /static
if err != nil {
return err
}
// ...
Handler: h.Router(staticFS),
Patikrink. Iš naujo sugeneruok šablonus, tada paleisk:
templ generate
go run ./cmd/signflow
Atsidaryk http://localhost:8080. Tas pats turinys kaip 1 pamokoje — bet dabar tai tikras, stilizuotas puslapis: SignFlow antraštė, hero, „Skeleton status" kortelė, visi apsirengę stilių lapu. Peržiūrėk šaltinį — pamatysi visą HTML, kurį sukūrė maketas. Ir:
$ curl -s -o /dev/null -w "%{http_code}\n" localhost:8080/static/css/style.css
200
CSS aptarnaujamas iš dvejetainio vidaus.
Spąstai (pakartojimas — pasenęs šablonas). Pakeitei
home.templ, perkrovei, pokyčio nematyti? Praleidaitempl generate. Dvejetainis atvaizduoja komituotą_templ.go, ne tavo pakeistą.templ. Sugeneruok, perkompiliuok, perkrauk.