Fiber - это экспресс -вдохновленный веб -структура, построенная на вершине FASTHTTP, самый быстрый двигатель HTTP для GO. Разработано, чтобы облегчить ситуацию для быстрой разработки с учетом ноль памяти и производительности .
Волокно V3 в настоящее время находится в бета -версии и находится в активном развитии. Несмотря на то, что он предлагает новые захватывающие функции, обратите внимание, что это может не быть стабильным для использования производства. Мы рекомендуем придерживаться последнего стабильного выпуска (v2.x) для критически важных приложений. Если вы решите использовать V3, будьте готовы к потенциальным ошибкам и нарушениям изменений. Всегда проверяйте официальную документацию и заметки о выпуске для обновлений и придерживайтесь осторожности. Счастливого кодирования!
Волокно требует версии 1.23 или выше, чтобы запустить. Если вам нужно установить или обновить Go, посетите официальную страницу загрузки Go. Чтобы начать настройку своего проекта, создайте новый каталог для вашего проекта и перейдите в него. Затем инициализируйте свой проект с помощью модулей GO, выполнив следующую команду в вашем терминале:
go mod init github.com/your/repoЧтобы узнать больше о модулях GO и о том, как они работают, вы можете проверить сообщение в блоге «Использование модулей GO».
После настройки проекта вы можете установить волокно с помощью команды go get :
go get -u github.com/gofiber/fiber/v3Эта команда приносит пакет волокна и добавляет его к зависимостям вашего проекта, позволяя вам начать создавать ваши веб -приложения с помощью волокна.
Начнуть с волокном легко. Вот базовый пример для создания простого веб -сервера, который отвечает "Привет, мир!" на корневом пути. Этот пример демонстрирует инициализацию нового приложения для волокна, настройку маршрута и запуска сервера.
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
func main () {
// Initialize a new Fiber app
app := fiber . New ()
// Define a route for the GET method on the root path '/'
app . Get ( "/" , func ( c fiber. Ctx ) error {
// Send a string response to the client
return c . SendString ( "Hello, World !" )
})
// Start the server on port 3000
log . Fatal ( app . Listen ( ":3000" ))
} Этот простой сервер легко настроить и запустить. Он вводит основные концепции волокна: инициализация приложения, определение маршрута и запуск сервера. Просто запустите эту программу GO и посетите http://localhost:3000 в вашем браузере, чтобы увидеть сообщение.
Волокно оптимизировано для высокопроизводительных значений , значения, возвращаемых из Fiber.ctx, не являются неизменными по умолчанию и будут повторно использованы по запросам. Как правило, вы должны использовать только значения контекста в обработчике и не должны хранить никаких ссылок. Как только вы вернетесь из обработчика, любые значения, полученные из контекста, будут повторно использованы в будущих запросах. Посетите нашу документацию, чтобы узнать больше.
Эти тесты выполняются Techempower и Go Web. Если вы хотите увидеть все результаты, посетите нашу вики.
Новые суслики, которые переключаются с node.js на GO, имеют дело с кривой обучения, прежде чем они смогут начать создавать свои веб -приложения или микросервисы. Фотоводом, как веб -структура , было создано с идеей минимализма и следует по пути Unix , так что новые суслики могут быстро войти в мир с теплым и доверенным приветствием.
Fiber вдохновлен Express, самым популярным веб -структурой в Интернете. Мы объединили простоту экспресса и необработанной производительности GO. Если вы когда -либо реализовали веб -приложение в node.js ( с использованием экспресса или аналогичного ), то многие методы и принципы будут казаться для вас очень распространенными .
Мы слушаем наших пользователей в вопросах, Discord Channel и по всему Интернету, чтобы создать быструю , гибкую и дружелюбную веб -структуру GO для любых задач, сроков и навыков разработчика! Как и Express в мире JavaScript.
Ниже перечислены некоторые из общих примеров. Если вы хотите увидеть больше примеров кода, посетите наш рецепт рецептов или посетите нашу документацию API размещенной API.
package main
import (
"fmt"
"log"
"github.com/gofiber/fiber/v3"
)
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 ( "? From: %s, To: %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 is %s years old" , 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 ( "Hello, %s !" , c . Params ( "name" ))
return c . SendString ( msg ) // => Hello john !
})
log . Fatal ( app . Listen ( ":3000" ))
} package main
import (
"encoding/json"
"fmt"
"log"
"github.com/gofiber/fiber/v3"
)
func main () {
app := fiber . New ()
app . Get ( "/api/*" , func ( c fiber. Ctx ) error {
msg := fmt . Sprintf ( " %s" , c . Params ( "*" ))
return c . SendString ( msg ) // => register
}). Name ( "api" )
route := app . GetRoute ( "api" )
data , _ := json . MarshalIndent ( route , "" , " " )
fmt . Println ( string ( data ))
// Prints:
// {
// "method": "GET",
// "name": "api",
// "path": "/api/*",
// "params": [
// "*1"
// ]
// }
log . Fatal ( app . Listen ( ":3000" ))
} package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/static"
)
func main () {
app := fiber . New ()
// Serve static files from the "./public" directory
app . Get ( "/*" , static . New ( "./public" ))
// => http://localhost:3000/js/script.js
// => http://localhost:3000/css/style.css
app . Get ( "/prefix*" , static . New ( "./public" ))
// => http://localhost:3000/prefix/js/script.js
// => http://localhost:3000/prefix/css/style.css
// Serve a single file for any unmatched routes
app . Get ( "*" , static . New ( "./public/index.html" ))
// => http://localhost:3000/any/path/shows/index.html
log . Fatal ( app . Listen ( ":3000" ))
} package main
import (
"fmt"
"log"
"github.com/gofiber/fiber/v3"
)
func main () {
app := fiber . New ()
// Middleware that matches any route
app . Use ( func ( c fiber. Ctx ) error {
fmt . Println ( "? First handler" )
return c . Next ()
})
// Middleware that matches all routes starting with /api
app . Use ( "/api" , func ( c fiber. Ctx ) error {
fmt . Println ( "? Second handler" )
return c . Next ()
})
// GET /api/list
app . Get ( "/api/list" , func ( c fiber. Ctx ) error {
fmt . Println ( "? Last handler" )
return c . SendString ( "Hello, World !" )
})
log . Fatal ( app . Listen ( ":3000" ))
}Конфигурационные двигатели рендеринг
По умолчанию волокна по умолчанию в HTML/шаблон, когда двигатель просмотра не установлен.
Если вы хотите выполнить частичные или использовать другой двигатель, такой как Amber, Handle, усы или мопс и т. Д., Проверьте наш пакет шаблонов, который поддерживает несколько двигателей просмотра.
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/template/pug"
)
func main () {
// Initialize a new Fiber app with Pug template engine
app := fiber . New (fiber. Config {
Views : pug . New ( "./views" , ".pug" ),
})
// Define a route that renders the "home.pug" template
app . Get ( "/" , func ( c fiber. Ctx ) error {
return c . Render ( "home" , fiber. Map {
"title" : "Homepage" ,
"year" : 1999 ,
})
})
log . Fatal ( app . Listen ( ":3000" ))
}Группа
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
func middleware ( c fiber. Ctx ) error {
log . Println ( "Middleware executed" )
return c . Next ()
}
func handler ( c fiber. Ctx ) error {
return c . SendString ( "Handler response" )
}
func main () {
app := fiber . New ()
// Root API group with middleware
api := app . Group ( "/api" , middleware ) // /api
// API v1 routes
v1 := api . Group ( "/v1" , middleware ) // /api/v1
v1 . Get ( "/list" , handler ) // /api/v1/list
v1 . Get ( "/user" , handler ) // /api/v1/user
// API v2 routes
v2 := api . Group ( "/v2" , middleware ) // /api/v2
v2 . Get ( "/list" , handler ) // /api/v2/list
v2 . Get ( "/user" , handler ) // /api/v2/user
log . Fatal ( app . Listen ( ":3000" ))
}Регистратор
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/logger"
)
func main () {
app := fiber . New ()
// Use Logger middleware
app . Use ( logger . New ())
// Define routes
app . Get ( "/" , func ( c fiber. Ctx ) error {
return c . SendString ( "Hello, Logger!" )
})
log . Fatal ( app . Listen ( ":3000" ))
}Корр
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/cors"
)
func main () {
app := fiber . New ()
// Use CORS middleware with default settings
app . Use ( cors . New ())
// Define routes
app . Get ( "/" , func ( c fiber. Ctx ) error {
return c . SendString ( "CORS enabled!" )
})
log . Fatal ( app . Listen ( ":3000" ))
} Проверьте Cors, передав любой домен в заголовке Origin :
curl -H " Origin: http://example.com " --verbose http://localhost:3000HTTP Методы
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
func main () {
app := fiber . New ()
// Define routes
app . Get ( "/" , static . New ( "./public" ))
app . Get ( "/demo" , func ( c fiber. Ctx ) error {
return c . SendString ( "This is a demo page!" )
})
app . Post ( "/register" , func ( c fiber. Ctx ) error {
return c . SendString ( "Registration successful!" )
})
// Middleware to handle 404 Not Found
app . Use ( func ( c fiber. Ctx ) error {
return c . SendStatus ( fiber . StatusNotFound ) // => 404 "Not Found"
})
log . Fatal ( app . Listen ( ":3000" ))
}Json
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main () {
app := fiber . New ()
// Route that returns a JSON object
app . Get ( "/user" , func ( c fiber. Ctx ) error {
return c . JSON ( & User { "John" , 20 })
// => {"name":"John", "age":20}
})
// Route that returns a JSON map
app . Get ( "/json" , func ( c fiber. Ctx ) error {
return c . JSON (fiber. Map {
"success" : true ,
"message" : "Hi John!" ,
})
// => {"success":true, "message":"Hi John!"}
})
log . Fatal ( app . Listen ( ":3000" ))
}WebSocket
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/websocket"
)
func main () {
app := fiber . New ()
// WebSocket route
app . Get ( "/ws" , websocket . New ( func ( c * websocket. Conn ) {
defer c . Close ()
for {
// Read message from client
mt , msg , err := c . ReadMessage ()
if err != nil {
log . Println ( "read:" , err )
break
}
log . Printf ( "recv: %s" , msg )
// Write message back to client
err = c . WriteMessage ( mt , msg )
if err != nil {
log . Println ( "write:" , err )
break
}
}
}))
log . Fatal ( app . Listen ( ":3000" ))
// Connect via WebSocket at ws://localhost:3000/ws
}Больше информации
package main
import (
"bufio"
"fmt"
"log"
"time"
"github.com/gofiber/fiber/v3"
"github.com/valyala/fasthttp"
)
func main () {
app := fiber . New ()
// Server-Sent Events route
app . Get ( "/sse" , func ( c fiber. Ctx ) error {
c . Set ( "Content-Type" , "text/event-stream" )
c . Set ( "Cache-Control" , "no-cache" )
c . Set ( "Connection" , "keep-alive" )
c . Set ( "Transfer-Encoding" , "chunked" )
c . Context (). SetBodyStreamWriter ( func ( w * bufio. Writer ) {
var i int
for {
i ++
msg := fmt . Sprintf ( "%d - the time is %v" , i , time . Now ())
fmt . Fprintf ( w , "data: Message: %s n n " , msg )
fmt . Println ( msg )
w . Flush ()
time . Sleep ( 5 * time . Second )
}
})
return nil
})
log . Fatal ( app . Listen ( ":3000" ))
}Восстанавливаться
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/recover"
)
func main () {
app := fiber . New ()
// Use Recover middleware to handle panics gracefully
app . Use ( recover . New ())
// Route that intentionally panics
app . Get ( "/" , func ( c fiber. Ctx ) error {
panic ( "normally this would crash your app" )
})
log . Fatal ( app . Listen ( ":3000" ))
}Конфигурация
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
func main () {
app := fiber . New (fiber. Config {
// Configure trusted proxies - WARNING: Only trust proxies you control
// Using TrustProxy: true with unrestricted IPs can lead to IP spoofing
TrustProxy : true ,
TrustProxyConfig : fiber. TrustProxyConfig {
Proxies : [] string { "10.0.0.0/8" , "172.16.0.0/12" }, // Example: Internal network ranges only
},
ProxyHeader : fiber . HeaderXForwardedFor ,
})
// Define routes
app . Get ( "/" , func ( c fiber. Ctx ) error {
return c . SendString ( "Trusted Proxy Configured!" )
})
log . Fatal ( app . Listen ( ":3000" ))
}Вот список промежуточного программного обеспечения, которое включено в оптоволоконную структуру.
| Промежуточное программное обеспечение | Описание |
|---|---|
| адаптер | Конвертер для обработчиков Net/HTTP в/из обработчиков запросов волокна. |
| базовый | Обеспечивает базовую аутентификацию HTTP. Он вызывает следующего обработчика для действительных учетных данных и 401, несанкционированного для отсутствующих или недействительных учетных данных. |
| кеш | Перехват и кэш ответов HTTP. |
| компресс | Сжатие промежуточного программного обеспечения для волокна, с поддержкой deflate , gzip , brotli и zstd . |
| корр | Включить обмен ресурсами кросс-аоригина (CORS) с различными вариантами. |
| CSRF | Защитите от CSRF -эксплойтов. |
| Раннийдата | Добавляет поддержку для ранних данных TLS 1.3 («0-RTT»). |
| Encryptcookie | Зашифруйте промежуточное программное обеспечение, которое шифрует значения cookie. |
| Envvar | Разместите переменные среды с предоставлением дополнительной конфигурации. |
| etag | Позволяет, чтобы кэши были более эффективными и сохранять пропускную способность, поскольку веб -сервер не нуждается в повторном ответе, если контент не изменился. |
| expvar | Служит через свой HTTP -сервер, разоблаченные переменные в формате JSON. |
| Фавикон | Игнорируйте FAVICON из журналов или подайте из памяти, если будет предоставлен путь файла. |
| HealthCheck | ЛЮБИЛЬНАЯ И ПОДГОТОВКА ПЕРЕДИТЕЛЬСТВА ДЛЯ КОБРЕТА. |
| шлем | Помогает защитить ваши приложения, установив различные заголовки HTTP. |
| Идемпотентность | Позволяет, чтобы API-интерфейсы устойчиво к сбоям, где дубликаты запросов не ошибочно вызывают одно и то же действие, выполняемое несколько раз на стороне сервера. |
| Keyauth | Добавляет поддержку для аутентификации на основе ключей. |
| ограничитель | Добавляет ограничивающую ставку поддержку волокна. Используйте для ограничения повторяющихся запросов для публичных API и/или конечных точек, таких как сброс пароля. |
| регистратор | HTTP -запрос/регистратор ответов. |
| PPROF | Обслуживает данные профилирования времени выполнения в формате PPROF. |
| прокси | Позволяет вам прокси -запросы на несколько серверов. |
| восстанавливаться | Восстанавливается из панику в любом месте цепочки стека и обрабатывает управление централизованным ошибкой. |
| перенаправить | Перенаправить промежуточное программное обеспечение. |
| requestId | Добавляет идентификатор запроса в каждый запрос. |
| переписать | Переписывает путь URL на основе предоставленных правил. Это может быть полезно для обратной совместимости или просто создания более чистых и более описательных ссылок. |
| сессия | Промежуточное программное обеспечение. Примечание. Это промежуточное программное обеспечение использует наш пакет хранения. |
| пропускать | Пропустите промежуточное программное обеспечение, которое пропускает обернутый обработчик, если предикат верен. |
| статический | Статическое промежуточное программное обеспечение для волокна, которое обслуживает статические файлы, такие как изображения , CSS и JavaScript . |
| тайм -аут | Добавляет максимальное время для запроса и перенаправляет в ErrorHandler, если он превышен. |
Список модулей промежуточного программного обеспечения извне и поддерживается командой волокна.
| Промежуточное программное обеспечение | Описание |
|---|---|
| вносить | Сторонние Middlewares |
| хранилище | Преднамеренные драйверы хранения, которые реализуют интерфейс хранения, предназначенные для использования с различными волоконными средами. |
| шаблон | Этот пакет содержит 9 шаблонных двигателей, которые можно использовать с волокном v3 . Go версия 1.23 или выше требуется. |
Чтобы узнать больше статей, среднихвор, примеров или инструментов, проверьте наш потрясающий список.
Если вы хотите сказать спасибо и/или поддержать активное развитие Fiber :
Чтобы ваши взносы были готовы к запросу на привлечение, используйте следующие команды Makefile . Эти инструменты помогают поддерживать качество и согласованность кода.
Запустите эти команды, чтобы гарантировать, что ваш код соблюдает стандарты проекта и лучшие практики.
Fiber-это проект с открытым исходным кодом, который работает на пожертвованиях для оплаты счетов, например, наше доменное имя, Gitbook, NetLify и без сервера. Если вы хотите поддержать волокно, вы можете ☕ купить здесь кофе .
| Пользователь | Пожертвование | |
|---|---|---|
| @destari | ☕ x 10 | |
| @dembygenesis | ☕ x 5 | |
| @ThomasVvugt | ☕ x 5 | |
| @hendratommy | ☕ x 5 | |
| @ekaputra07 | ☕ x 5 | |
| @jorgefuertes | ☕ x 5 | |
| @Candidosales | ☕ x 5 | |
| @l0nax | ☕ x 3 | |
| @BIHE | ☕ x 3 | |
| @justdave | ☕ x 3 | |
| @koddr | ☕ x 1 | |
| @lapolinar | ☕ x 1 | |
| @diegowifi | ☕ x 1 | |
| @ssimk0 | ☕ x 1 | |
| @raymayemir | ☕ x 1 | |
| @melkorm | ☕ x 1 | |
| @marvinjwendt | ☕ x 1 | |
| @toishy | ☕ x 1 |
Copyright (C) 2019-Cresent Fenny and Antormors. Fiber бесплатно и программное обеспечение с открытым исходным кодом, лицензированное по лицензии MIT. Официальный логотип был создан Vic Shóstak и распространяется по лицензии Creative Commons (CC BY-SA 4.0 International).