Fiber
вдохновлен самым популярным веб-фреймворком Express
в интернете. Мы объединяем удобство Express
и сырую производительность Go
. Если вы когда-либо создавали веб-приложение с использованием Node.js
(используя Express или подобный фреймворк), то многие методы и принципы должны быть для вас очень простыми.
Быстрый старт
Установка
Убедитесь, что у вас установлен Go 1.17
или выше.
Инициализируйте ваш проект, создав папку и запустив go mod init github.com/your/repo
внутри папки, затем установите Fiber, используя команду go get
:
go get -u github.com/gofiber/fiber/v2
Hello World
package main
// Импортируем пакет Fiber
import "github.com/gofiber/fiber/v2"
func main() {
// Определяем приложение Fiber
app := fiber.New()
// Определяем http-маршрут
app.Get("/", func(c *fiber.Ctx) error {
// Возвращаем строку "Привет, мир!"
return c.SendString("Привет, Мир ?!")
})
// Слушаем порт 3000
app.Listen(":3000")
}
Доступ по адресу: http://localhost:3000/
Базовая маршрутизация
Пример базовой маршрутизации в Fiber
func main() {
app := fiber.New()
// GET /api/register
app.Get("/api/*", func(c *fiber.Ctx) error {
msg := fmt.Sprintf("✋ %s", c.Params("*"))
return c.SendString(msg) // => ✋ register
})
// GET /flights/LAX-SFO
app.Get("/flights/:from-:to", func(c *fiber.Ctx) error {
msg := fmt.Sprintf("? Откуда: %s, Куда: %s", c.Params("from"), c.Params("to"))
return c.SendString(msg) // => ? From: LAX, To: SFO
})
// GET /dictionary.txt
app.Get("/:file.:ext", func(c *fiber.Ctx) error {
msg := fmt.Sprintf("? %s.%s", c.Params("file"), c.Params("ext"))
return c.SendString(msg) // => ? dictionary.txt
})
// GET /john/75
app.Get("/:name/:age/:gender?", func(c *fiber.Ctx) error {
msg := fmt.Sprintf("? %s имеет %s лет", c.Params("name"), c.Params("age"))
return c.SendString(msg) // => ? john is 75 years old
})
// GET /john
app.Get("/:name", func(c *fiber.Ctx) error {
msg := fmt.Sprintf("Привет, %s ?!", c.Params("name"))
return c.SendString(msg) // => Hello john ?!
})
log.Fatal(app.Listen(":3000"))
}
Обслуживание статических файлов
Настройка обслуживания статических файлов
func main() {
app := fiber.New()
app.Static("/", "./public")
// => http://localhost:3000/js/script.js
// => http://localhost:3000/css/style.css
app.Static("/prefix", "./public")
// => http://localhost:3000/prefix/js/script.js
// => http://localhost:3000/prefix/css/style.css
app.Static("*", "./public/index.html")
// => http://localhost:3000/any/path/shows/index/html
log.Fatal(app.Listen(":3000"))
}
Промежуточное программное обеспечение
Расширьте возможность обработки HTTP-запросов через промежуточное программное обеспечение.
func main() {
app := fiber.New()
// Сопоставляем любой маршрут, здесь настраиваем промежуточное программное обеспечение, используя замыкание
app.Use(func(c *fiber.Ctx) error {
fmt.Println("? Первый обработчик")
// Продолжаем обрабатывать следующее промежуточное программное обеспечение или функцию маршрута
return c.Next()
})
// Сопоставление маршрутов, начинающихся с /api
app.Use("/api", func(c *fiber.Ctx) error {
fmt.Println("? Второй обработчик")
return c.Next()
})
// Используем встроенное промежуточное программное обеспечение для обработки исключений
app.Use(recover.New())
// GET /api/register
app.Get("/api/list", func(c *fiber.Ctx) error {
fmt.Println("? Последний обработчик")
return c.SendString("Привет, Мир ?!")
})
log.Fatal(app.Listen(":3000"))
}
Шаблонизатор
Если шаблонизатор не установлен, Fiber
по умолчанию использует html/template.
package main
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/template/pug"
)
func main() {
// Установка шаблонизатора
app := fiber.New(fiber.Config{
Views: pug.New("./views", ".pug"),
})
app.Get("/", func(c *fiber.Ctx) error {
// Рендеринг шаблона ./views/home.pug с использованием параметров шаблона fiber.map
return c.Render("home", fiber.Map{
"title": "Домашняя страница",
"year": 1999,
})
})
log.Fatal(app.Listen(":3000"))
}
Промежуточное программное обеспечение для обмена ресурсами с другими источниками (CORS)
Промежуточное программное обеспечение для CORS в Fiber, позволяет осуществлять обмен ресурсами с другими источниками с различными параметрами для предотвращения атак CORS.
import (
"log"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/cors"
)
func main() {
app := fiber.New()
// Конфигурация CORS по умолчанию
app.Use(cors.New())
// Или настраиваем параметры CORS для разрешения запросов с определенных доменов
app.Use(cors.New(cors.Config{
AllowOrigins: "https://www.tizi365.com, https://tizi365.com",
AllowHeaders: "Origin, Content-Type, Accept",
}))
log.Fatal(app.Listen(":3000"))
}
Проверить CORS, передав в заголовке Origin
любой домен:
curl -H "Origin: https://www.tizi365.com" --verbose http://localhost:3000
Пользовательский ответ 404
func main() {
app := fiber.New()
app.Static("/", "./public")
app.Get("/demo", func(c *fiber.Ctx) error {
return c.SendString("Это демо!")
})
app.Post("/register", func(c *fiber.Ctx) error {
return c.SendString("Добро пожаловать!")
})
// Последнее используемое промежуточное программное обеспечение будет соответствовать всем запросам, включая 404
app.Use(func(c *fiber.Ctx) error {
// Другая логика обработки
// Возврат кода состояния 404
return c.SendStatus(404)
// => 404 "Не найдено"
})
log.Fatal(app.Listen(":3000"))
}
Ответ в формате JSON
Пример возвращения данных в формате JSON в Fiber.
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
app := fiber.New()
app.Get("/user", func(c *fiber.Ctx) error {
return c.JSON(&User{"John", 20})
// => {"name":"John", "age":20}
})
app.Get("/json", func(c *fiber.Ctx) error {
return c.JSON(fiber.Map{
"success": true,
"message": "Привет, Джон!",
})
// => {"success":true, "message":"Привет, Джон!"}
})
log.Fatal(app.Listen(":3000"))
}
Промежуточное программное обеспечение восстановления
Перехват ошибок паники для предотвращения аварийного завершения программы.
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/recover"
)
func main() {
app := fiber.New()
// Используйте промежуточное программное обеспечение для перехвата исключений паники
app.Use(recover.New())
app.Get("/", func(c *fiber.Ctx) error {
panic("обычно это привело бы к аварийному завершению вашего приложения")
})
log.Fatal(app.Listen(":3000"))
}
Оценка производительности
[
Ограничения
- Из-за использования небезопасных функций в Fiber он может быть несовместим с последними версиями Go. Fiber 2.40.0 был протестирован с версиями Go от 1.17 до 1.21.
- Fiber несовместим с интерфейсом net/http. Это означает, что вы не можете непосредственно использовать проекты, такие как gqlgen, go-swagger или любые другие проекты, принадлежащие экосистеме net/http.