Skip to content

Basic Usage

package main
import "github.com/fox-gonic/fox"
func main() {
r := fox.Default()
r.GET("/", func() string {
return "Hello, World!"
})
r.Run(":8080")
}
package main
import (
"github.com/fox-gonic/fox"
)
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
}
type CreateUserRequest struct {
Name string `json:"name" binding:"required"`
Email string `json:"email" binding:"required,email"`
}
type UpdateUserRequest struct {
ID int `uri:"id" binding:"required"`
Name string `json:"name" binding:"required"`
Email string `json:"email" binding:"required,email"`
}
var users = []User{
{ID: 1, Name: "John Doe", Email: "john@example.com"},
{ID: 2, Name: "Jane Smith", Email: "jane@example.com"},
}
func main() {
r := fox.Default()
// List users
r.GET("/users", func() []User {
return users
})
// Get user by ID
r.GET("/users/:id", func(id int) (*User, error) {
for _, u := range users {
if u.ID == id {
return &u, nil
}
}
return nil, fox.ErrNotFound
})
// Create user
r.POST("/users", func(req *CreateUserRequest) (*User, error) {
user := User{
ID: len(users) + 1,
Name: req.Name,
Email: req.Email,
}
users = append(users, user)
return &user, nil
})
// Update user
r.PUT("/users/:id", func(req *UpdateUserRequest) (*User, error) {
for i, u := range users {
if u.ID == req.ID {
users[i].Name = req.Name
users[i].Email = req.Email
return &users[i], nil
}
}
return nil, fox.ErrNotFound
})
// Delete user
r.DELETE("/users/:id", func(id int) error {
for i, u := range users {
if u.ID == id {
users = append(users[:i], users[i+1:]...)
return nil
}
}
return fox.ErrNotFound
})
r.Run(":8080")
}
package main
import (
"time"
"github.com/fox-gonic/fox"
"github.com/gin-gonic/gin"
)
func TimingMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
start := time.Now()
c.Next()
latency := time.Since(start)
logger := fox.GetLogger(c)
logger.Info("Request completed",
"latency_ms", latency.Milliseconds(),
)
}
}
func main() {
r := fox.Default()
r.Use(TimingMiddleware())
r.GET("/api/data", func() map[string]string {
time.Sleep(100 * time.Millisecond) // Simulate work
return map[string]string{
"message": "Data retrieved",
}
})
r.Run(":8080")
}