package models import ( "net/http" "html/template" "strconv" ) type Page struct { Path string Template string Data map[string]interface{} DynamicDataLoader func(int) map[string]interface{} } func DynamicDataLoaderCategory(id int) map[string]interface{}{ return map[string]interface{}{ "category": GetCategoryById(id), "products": GetCategoryProducts(id), } } func (p Page) HandlePage(w http.ResponseWriter, r *http.Request) { if p.DynamicDataLoader != nil { id, err := strconv.Atoi(r.URL.Query()["id"][0]) if err == nil { p.Data = p.DynamicDataLoader(id) } } t, _ := template.ParseFiles(p.Template, "templates/base.html") t.ExecuteTemplate(w, "base", p.Data) } type Category struct { Id int Name string } type Product struct { Id int Category Category Name string Description string ImgUrl string Quantity uint Price uint } var Pages map[string]Page var Categories []Category var Products []Product func GetCategoryByName(name string) Category { var category Category for i:= range Categories { if Categories[i].Name == name { category = Categories[i] break } } return category } func GetCategoryById(id int) Category { var category Category for i:= range Categories { if Categories[i].Id == id { category = Categories[i] break } } return category } func GetCategoryProducts(id int) []Product { var products []Product for i:= range Products { if Products[i].Category.Id == id { products = append(products, Products[i]) break } } return products }