package main import ( "bytes" "encoding/json" "fmt" "html/template" "io" "net/http" "todo/frontend" "todo/models" "github.com/gofiber/fiber/v2" ) var Tmpl *template.Template func doGet(url string) ([]byte, error) { // Perform an HTTP GET request response, err := http.Get(url) if err != nil { return nil, err } defer response.Body.Close() // Read the response body body, err := io.ReadAll(response.Body) if err != nil { return nil, err } return body, nil } func SetupTemplates() error { tmpl, err := template.New("").ParseFS(frontend.Frontend, "templates/*.html") if err != nil { return err } Tmpl = tmpl return nil } func main() { SetupTemplates() app := fiber.New(fiber.Config{ StrictRouting: false, DisableStartupMessage: false, }) app.Static("/", "./frontend") app.Get("/", func(c *fiber.Ctx) error { var result bytes.Buffer err := Tmpl.ExecuteTemplate(&result, "index", nil) if err != nil { fmt.Println(err) return err } c.Set("Content-Type", "text/html") return c.SendString(result.String()) }) app.Get("/users", func(c *fiber.Ctx) error { response, err := doGet("https://dummyjson.com/users") if err != nil { fmt.Println(err) return err } var users models.Users err = json.Unmarshal(response, &users) if err != nil { fmt.Println(err) return err } var result bytes.Buffer err = Tmpl.ExecuteTemplate(&result, "users", users) if err != nil { fmt.Println(err) return err } return c.SendString(result.String()) }) app.Listen(":3000") }