Advanced Guide
Overriding Default
GoFr allows overriding default behavior of its features.
Raw response format
GoFr by default wraps a handler's return value and assigns it to the data
field in a response.
Example
package main
import "gofr.dev/pkg/gofr"
type user struct {
ID int `json:"id"`
Name string `json:"name"`
}
func main() {
app := gofr.New()
app.GET("/users", func(ctx *gofr.Context) (any, error) {
users := []user{{ID: 1, Name: "Daria"}, {ID: 2, Name: "Ihor"}}
return users, nil
})
app.Run()
}
Response example:
{
"data": [
{
"id": 1,
"name": "Daria"
},
{
"id": 2,
"name": "Ihor"
}
]
}
If you want to have a raw response structure - wrap it in response.Raw
:
app.GET("/users", func(ctx *gofr.Context) (any, error) {
users := []user{{ID: 1, Name: "Daria"}, {ID: 2, Name: "Ihor"}}
return response.Raw{Data: users}, nil
})
Response example:
[
{
"id": 1,
"name": "Daria"
},
{
"id": 2,
"name": "Ihor"
}
]
Rendering Templates
GoFr allows rendering HTML/HTMX templates in handlers using the response.Template type.
Example
package main
import (
"gofr.dev/pkg/gofr"
"gofr.dev/pkg/gofr/http/response"
)
func main() {
app := gofr.New()
app.GET("/list", listHandler)
app.AddStaticFiles("/", "./static")
app.Run()
}
type Todo struct {
Title string
Done bool
}
type TodoPageData struct {
PageTitle string
Todos []Todo
}
func listHandler(ctx *gofr.Context) (any, error) {
// Get data from somewhere
data := TodoPageData{
PageTitle: "My TODO list",
Todos: []Todo{
{Title: "Expand on Gofr documentation ", Done: false},
{Title: "Add more examples", Done: true},
{Title: "Write some articles", Done: false},
},
}
return response.Template{Data: data, Name: "todo.html"}, nil
}
Favicon.ico
By default, GoFr load its own favicon.ico
present in root directory for an application. To override favicon.ico
user can place its custom icon in the static directory of its application.
NOTE: The custom favicon should also be named as
favicon.ico
in the static directory of application.