Tema
/
Interneto svetainių serverio dalies kūrimas GO

Sujunk ir aptarnauk — static, handlers, router, main

Keturi failai kaip skirtukai, priklausomybių tvarka: static/embed.gohandlers.gorouter.gomain.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? Praleidai templ generate. Dvejetainis atvaizduoja komituotą _templ.go, ne tavo pakeistą .templ. Sugeneruok, perkompiliuok, perkrauk.