19 KiB
Fiber — это веб фреймворк, который был вдохновлен Express и основан на Fasthttp, самом быстром HTTP-движке написанном на Go. Фреймворк был разработан с целью упростить процесс быстрой разработки высокопроизводительных веб-приложений с нулевым распределением памяти.
⚡️ Быстрый старт
package main
import "github.com/gofiber/fiber"
func main() {
app := fiber.New()
app.Get("/", func(c *fiber.Ctx) {
c.Send("Hello, World!")
})
app.Listen(3000)
}
⚙️ Установка
Прежде всего, скачайте и установите Go. Версия 1.11 или выше.
Установка выполняется с помощью команды go get
:
go get -u github.com/gofiber/fiber/...
🤖 Бенчмарки
Тестирование проводилось с помощью TechEmpower и Go Web. Если вы хотите увидеть все результаты, пожалуйста, посетите наш Wiki.
🎯 Особенности
- Надежная маршрутизация
- Доступ к статичным файлам
- Экстремальная производительность
- Низкий объем потребления памяти
- Эндпоинты, как в API Express
- Middleware и поддержка Next
- Быстрое программирование на стороне сервера
- Переведен на 9 других языков
- И многое другое, посетите наш Wiki
💡 Философия
Новые Go-программисты, которые переключаются с Node.js на Go, имеют дело с очень извилистой кривой обучения, прежде чем они смогут начать создавать свои веб-приложения или микросервисы. Fiber, как веб-фреймворк, был создан с идеей минимализма и следовал принципу UNIX, так что новички смогут быстро войти в мир Go без особых проблем.
Fiber вдохновлен Express, самым популярным веб фреймворком в Интернете. Мы объединили простоту Express и чистую производительность Go. Если вы когда-либо реализовывали веб-приложение на Node.js (с использованием Express или аналогичного фреймворка), то многие методы и принципы покажутся вам очень знакомыми.
Мы прислушиваемся к нашим пользователям в issues (и остальном Интернете), чтобы создать быстрый, гибкий и дружелюбный веб фреймворк на Go для любых задач, дедлайнов и уровней разработчиков! Как это делает Express в мире JavaScript.
👀 Примеры
Ниже перечислены некоторые из распространенных примеров. Если вы хотите увидеть больше примеров кода, пожалуйста, посетите наш репозиторий рецептов или документацию по API.
Роутинг
Документация:
Пример:
func main() {
app := fiber.New()
// GET /john
app.Get("/:name", func(c *fiber.Ctx) {
fmt.Printf("Hello %s!", c.Params("name"))
// => Hello john!
})
// GET /john
app.Get("/:name/:age?", func(c *fiber.Ctx) {
fmt.Printf("Name: %s, Age: %s", c.Params("name"), c.Params("age"))
// => Name: john, Age:
})
// GET /api/register
app.Get("/api*", func(c *fiber.Ctx) {
fmt.Printf("/api%s", c.Params("*"))
// => /api/register
})
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
app.Listen(3000)
}
Middleware и функция Next
Документация:
Пример:
func main() {
app := fiber.New()
// Match any route
app.Use(func(c *fiber.Ctx) {
fmt.Println("First middleware")
c.Next()
})
// Match all routes starting with /api
app.Use("/api", func(c *fiber.Ctx) {
fmt.Println("Second middleware")
c.Next()
})
// POST /api/register
app.Post("/api/register", func(c *fiber.Ctx) {
fmt.Println("Last middleware")
c.Send("Hello, World!")
})
app.Listen(3000)
}
📚 Показать больше примеров кода
Работа с шаблонами
Документация:
Поддерживаемые движки шаблонов:
Пример:
func main() {
// Вы можете настроить нужный движок для шаблонов
// перед инициализацией приложения:
app := fiber.New(&fiber.Settings{
TemplateEngine: "mustache",
TemplateFolder: "./views",
TemplateExtension: ".tmpl",
})
// ИЛИ уже после инициализации приложения,
// в любом удобном месте:
app.Settings.TemplateEngine = "mustache"
app.Settings.TemplateFolder = "./views"
app.Settings.TemplateExtension = ".tmpl"
// Теперь, вы сможете вызывать шаблон `./views/home.tmpl` вот так:
app.Get("/", func(c *fiber.Ctx) {
c.Render("home", fiber.Map{
"title": "Homepage",
"year": 1999,
})
})
// ...
}
Группировка роутов в цепочки
Документация:
Пример:
func main() {
app := fiber.New()
// Корневой API роут
api := app.Group("/api", cors()) // /api
// Роуты для API v1
v1 := api.Group("/v1", mysql()) // /api/v1
v1.Get("/list", handler) // /api/v1/list
v1.Get("/user", handler) // /api/v1/user
// Роуты для API v2
v2 := api.Group("/v2", mongodb()) // /api/v2
v2.Get("/list", handler) // /api/v2/list
v2.Get("/user", handler) // /api/v2/user
// ...
}
Встроенный логгер
Документация:
Пример:
import (
"github.com/gofiber/fiber"
"github.com/gofiber/fiber/middleware"
)
func main() {
app := fiber.New()
// Если вы хотите изменить конфигурацию логгера по умолчанию
loggerConfig := middleware.LoggerConfig{
Format: "${time} - ${method} ${path}\n",
TimeFormat: "Mon, 2 Jan 2006 15:04:05 MST",
}
// Middleware для логгера с кастомным конфигом
app.Use(middleware.Logger(loggerConfig))
// ...
}
Cross-Origin Resource Sharing (CORS)
Документация:
CORS — это механизм, использующий дополнительные HTTP-заголовки, чтобы дать возможность агенту пользователя получать разрешения на доступ к выбранным ресурсам с сервера на источнике (домене), отличном от того, что сайт использует в данный момент.
Пример:
import (
"github.com/gofiber/fiber"
"github.com/gofiber/fiber/middleware"
)
func main() {
app := fiber.New()
// Подключаем CORS для каждого роута в качестве middleware
app.Use(middleware.CORS())
app.Get("/", func(c *fiber.Ctx) {
c.Send("CORS is enabled!")
})
app.Listen(3000)
}
Проверьте работу CORS, передав любой домен в заголовке Origin
:
curl -H "Origin: http://example.com" --verbose http://localhost:3000
Обработка 404 ошибки
Документация:
Пример:
func main() {
app := fiber.New()
app.Static("/public")
app.Get("/demo", func(c *fiber.Ctx) {
c.Send("This is a demo!")
})
app.Post("/register", func(c *fiber.Ctx) {
c.Send("Welcome!")
})
// Last middleware to match anything
app.Use(func(c *fiber.Ctx) {
c.SendStatus(404) // => 404 "Not Found"
})
app.Listen(3000)
}
Ответ в формате JSON
Документация:
Пример:
func main() {
app := fiber.New()
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
// Serialize JSON
app.Get("/json", func(c *fiber.Ctx) {
c.JSON(&User{"John", 20})
// => {"name":"John", "age":20}
})
app.Listen(3000)
}
Поддержка WebSocket
Документация:
Пример:
func main() {
app := fiber.New()
app.WebSocket("/ws/:name", func(c *fiber.Conn) {
log.Println(c.Params("name"))
for {
mt, msg, err := c.ReadMessage()
if err != nil {
log.Println("read:", err)
break
}
log.Printf("recovery: %s", msg)
err = c.WriteMessage(mt, msg)
if err != nil {
log.Println("write:", err)
break
}
}
})
// Слушаем вебсокет по адресу ws://localhost:3000/ws/john
app.Listen(3000)
}
Восстановление работы после panic
Документация:
Пример:
func main() {
app := fiber.New()
app.Get("/", func(c *fiber.Ctx) {
panic("Something went wrong!")
})
app.Recover(func(c *fiber.Ctx) {
c.Status(500).Send(c.Error())
// => 500 "Something went wrong!"
})
app.Listen(3000)
}
💬 Медиа
- Welcome to Fiber — an Express.js styled web framework written in Go with ❤️ (by Vic Shóstak, 03 Feb 2020)
- Fiber release v1.7 is out now! 🎉 What's new and is he still fast, flexible and friendly? (by Vic Shóstak, 21 Feb 2020)
- 🚀 Fiber v1.8. What's new, updated and re-thinked? (by Vic Shóstak, 03 Mar 2020)
👍 Помощь проекту
Если вы хотите сказать спасибо и/или поддержать активное развитие Fiber
:
- Добавьте GitHub Star в проект.
- Напишите о проекте в вашем Twitter.
- Сделайте обзор фреймворка на Medium, Dev.to или в личном блоге.
- Помогите нам перевести
README
и API на другой язык.
☕ Те, кто уже поддержал проект

HenrikBinggl |
Vic Shóstak |
MarvinJWendt |
ToishY |
![]() JustDave |
⭐️ Звезды
⚠️ Лицензия
Fiber
— это бесплатное программное обеспечение с открытым исходным кодом, лицензированное по лицензии MIT.