Fiber

Fiber is een web framework geΓ―nspireerd door Express gebouwd bovenop Fasthttp, de snelste HTTP-engine voor Go. Ontworpen om snelle ontwikkeling gemakkelijker te maken zonder geheugenallocatie tezamen met hoge prestaties.

## ⚑️ Bliksemsnelle start ```go package main import "github.com/gofiber/fiber" func main() { app := fiber.New() app.Get("/", func(c *fiber.Ctx) { c.Send("Hallo, Wereld!") }) app.Listen(3000) } ``` ## πŸ€– Benchmarks Deze tests zijn uitgevoerd door [TechEmpower](https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=plaintext) en [Go Web](https://github.com/smallnest/go-web-framework-benchmark). Bezoek onze [Wiki](https://fiber.wiki/benchmarks) voor alle benchmark resultaten.

## βš™οΈ Installatie Allereerst, [download](https://golang.org/dl/) en installeer Go. `1.11` of hoger is vereist. Installatie wordt gedaan met behulp van het [`go get`](https://golang.org/cmd/go/#hdr-Add_dependencies_to_current_module_and_install_them) commando: ```bash go get -u github.com/gofiber/fiber ``` ## 🎯 Features - Robuuste [routing](https://fiber.wiki/routing) - Serveer [statische bestanden](https://fiber.wiki/application#static) - Extreme [prestaties](https://fiber.wiki/benchmarks) - [Weinig geheugenruimte](https://fiber.wiki/benchmarks) - [API endpoints](https://fiber.wiki/context) - [Middleware](https://fiber.wiki/middleware) & [Next](https://fiber.wiki/context#next) ondersteuning - [Snelle](https://dev.to/koddr/welcome-to-fiber-an-express-js-styled-fastest-web-framework-written-with-on-golang-497) server-side programmering - [Template engines](https://fiber.wiki/middleware#template) - [WebSocket ondersteuning](https://fiber.wiki/middleware#websocket) - [Rate Limiter](https://fiber.wiki/middleware#limiter) - Vertaald in [14 talen](https://docs.gofiber.io/) - En nog veel meer, [ontdek Fiber](https://fiber.wiki/) ## πŸ’‘ Filosofie Nieuwe gophers die de overstap maken van [Node.js](https://nodejs.org/en/about/) naar [Go](https://golang.org/doc/), hebben te maken met een leercurve voordat ze kunnen beginnen met het bouwen van hun webapplicaties of microservices. Fiber, als een **web framework**, is gebouwd met het idee van **minimalisme** en volgt de **UNIX-manier**, zodat nieuwe gophers snel de wereld van Go kunnen betreden met een warm en vertrouwd welkom.\ Fiber is **geΓ―nspireerd** door Express, het populairste webframework op internet. We hebben het **gemak** van Express gecombineerd met de **onbewerkte prestaties** van Go. Als je ooit een webapplicatie in Node.js hebt geΓ―mplementeerd (_zoals Express of vergelijkbaar_), dan zullen veel methoden en principes **heel gewoon** voor je lijken. We **luisteren** naar onze gebruikers in [issues](https://github.com/gofiber/fiber/issues) (_en overal op het internet_) om een **snelle**, **flexibele** en **vriendelijk** Go web framework te maken voor **elke** taak, **deadline** en ontwikkelaar **vaardigheid**! Net zoals Express dat doet in de JavaScript-wereld. ## πŸ‘€ Voorbeelden Hieronder staan enkele van de meest voorkomende voorbeelden. > Bekijk ons [Recepten repository](https://github.com/gofiber/recipes) voor meer voorbeelden met code of bezoek onze [API documentatie](https://fiber.wiki). ### Routing πŸ“– [Routing](https://docs.gofiber.io/#basic-routing) ```go 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 /plantae/prunus.persica app.Get("/plantae/:genus.:species", func(c *fiber.Ctx) { fmt.Printf("Genius: %s, Species: %s", c.Params("genus"), c.Params("species")) // => Genius: prunus, Species: persica }) // GET /flights/LAX-SFO app.Get("/flights/:from-:to", func(c *fiber.Ctx) { fmt.Printf("From: %s, To: %s", c.Params("from"), c.Params("to")) // => From: LAX, To: SFO }) // GET /api/register app.Get("/api/*", func(c *fiber.Ctx) { fmt.Printf("/api/%s", c.Params("*")) // => /api/register }) app.Listen(3000) } ``` ### Serve static files πŸ“– [Static](https://docs.gofiber.io/application#static) ```go 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 πŸ“– [Middleware](https://docs.gofiber.io/routing#middleware) πŸ“– [Next](https://docs.gofiber.io/context#next) ```go 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() }) // GET /api/register app.Get("/api/list", func(c *fiber.Ctx) { fmt.Println("Last middleware") c.Send("Hello, World!") }) app.Listen(3000) } ```
πŸ“š Show more code examples ### Views engines πŸ“– [Settings](https://docs.gofiber.io/application#settings) πŸ“– [Engines](https://github.com/gofiber/template) πŸ“– [Render](https://docs.gofiber.io/context#render) Fiber defaults to the [html/template](https://golang.org/pkg/html/template/) when no view engine is set. If you want to execute partials or use a different engine like [amber](https://github.com/eknkc/amber), [handlebars](https://github.com/aymerick/raymond), [mustache](https://github.com/cbroglie/mustache) or [pug](https://github.com/Joker/jade) etc.. Checkout our [Template](https://github.com/gofiber/template) package that support multiple view engines. ```go import ( "github.com/gofiber/fiber" "github.com/gofiber/template/pug" ) func main() { // You can setup Views engine before initiation app: app := fiber.New(&fiber.Settings{ Views: pug.New("./views", ".pug"), }) // OR after initiation app at any convenient location: app.Settings.Views = pug.New("./views", ".pug"), // And now, you can call template `./views/home.pug` like this: app.Get("/", func(c *fiber.Ctx) { c.Render("home", fiber.Map{ "title": "Homepage", "year": 1999, }) }) // ... } ``` ### Grouping routes into chains πŸ“– [Group](https://docs.gofiber.io/application#group) ```go func main() { app := fiber.New() // Root API route api := app.Group("/api", cors()) // /api // API v1 routes v1 := api.Group("/v1", mysql()) // /api/v1 v1.Get("/list", handler) // /api/v1/list v1.Get("/user", handler) // /api/v1/user // API v2 routes v2 := api.Group("/v2", mongodb()) // /api/v2 v2.Get("/list", handler) // /api/v2/list v2.Get("/user", handler) // /api/v2/user // ... } ``` ### Middleware logger πŸ“– [Logger](https://docs.gofiber.io/middleware#logger) ```go import ( "github.com/gofiber/fiber" "github.com/gofiber/logger" ) func main() { app := fiber.New() // Optional logger config config := logger.Config{ Format: "${time} - ${method} ${path}\n", TimeFormat: "Mon, 2 Jan 2006 15:04:05 MST", } // Logger with config app.Use(logger.New(config)) app.Listen(3000) } ``` ### Cross-Origin Resource Sharing (CORS) πŸ“– [CORS](https://docs.gofiber.io/middleware#cors) ```go import ( "github.com/gofiber/fiber" "github.com/gofiber/cors" ) func main() { app := fiber.New() // CORS with default config app.Use(cors.New()) app.Listen(3000) } ``` Check CORS by passing any domain in `Origin` header: ```bash curl -H "Origin: http://example.com" --verbose http://localhost:3000 ``` ### Custom 404 response πŸ“– [HTTP Methods](https://docs.gofiber.io/application#http-methods) ```go 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 Response πŸ“– [JSON](https://docs.gofiber.io/context#json) ```go type User struct { Name string `json:"name"` Age int `json:"age"` } func main() { app := fiber.New() app.Get("/user", func(c *fiber.Ctx) { c.JSON(&User{"John", 20}) // => {"name":"John", "age":20} }) app.Get("/json", func(c *fiber.Ctx) { c.JSON(fiber.Map{ "success": true, "message": "Hi John!", }) // => {"success":true, "message":"Hi John!"} }) app.Listen(3000) } ``` ### WebSocket Upgrade πŸ“– [Websocket](https://docs.gofiber.io/middleware#websocket) ```go import ( "github.com/gofiber/fiber" "github.com/gofiber/websocket" ) func main() { app := fiber.New() app.Get("/ws", websocket.New(func(c *websocket.Conn) { for { mt, msg, err := c.ReadMessage() if err != nil { log.Println("read:", err) break } log.Printf("recv: %s", msg) err = c.WriteMessage(mt, msg) if err != nil { log.Println("write:", err) break } } })) app.Listen(3000) // ws://localhost:3000/ws } ``` ### Recover middleware πŸ“– [Recover](https://docs.gofiber.io/middleware#recover) ```go import ( "github.com/gofiber/fiber" "github.com/gofiber/recover" ) func main() { app := fiber.New() // Optional recover config config := recover.Config{ Handler: func(c *fiber.Ctx, err error) { c.SendString(err.Error()) c.SendStatus(500) }, } // Logger with custom config app.Use(recover.New(config)) app.Listen(3000) } ```
## 🧬 Official Middlewares For an more _maintainable_ middleware _ecosystem_, we've put official [middlewares](https://docs.gofiber.io/middleware) into separate repositories: - [gofiber/compression](https://github.com/gofiber/compression) - [gofiber/basicauth](https://github.com/gofiber/basicauth) - [gofiber/requestid](https://github.com/gofiber/requestid) - [gofiber/websocket](https://github.com/gofiber/websocket) - [gofiber/keyauth](https://github.com/gofiber/keyauth) - [gofiber/rewrite](https://github.com/gofiber/rewrite) - [gofiber/recover](https://github.com/gofiber/recover) - [gofiber/limiter](https://github.com/gofiber/limiter) - [gofiber/session](https://github.com/gofiber/session) - [gofiber/adaptor](https://github.com/gofiber/adaptor) - [gofiber/logger](https://github.com/gofiber/logger) - [gofiber/helmet](https://github.com/gofiber/helmet) - [gofiber/embed](https://github.com/gofiber/embed) - [gofiber/pprof](https://github.com/gofiber/pprof) - [gofiber/cors](https://github.com/gofiber/cors) - [gofiber/csrf](https://github.com/gofiber/csrf) - [gofiber/jwt](https://github.com/gofiber/jwt) ## 🌱 Third Party Middlewares This is a list of middlewares that are created by the Fiber community, please create a PR if you want to see yours! - [arsmn/fiber-swagger](https://github.com/arsmn/fiber-swagger) - [arsmn/fiber-casbin](https://github.com/arsmn/fiber-casbin) - [arsmn/fiber-introspect](https://github.com/arsmn/fiber-introspect) - [shareed2k/fiber_tracing](https://github.com/shareed2k/fiber_tracing) - [shareed2k/fiber_limiter](https://github.com/shareed2k/fiber_limiter) - [thomasvvugt/fiber-boilerplate](https://github.com/thomasvvugt/fiber-boilerplate) - [arsmn/gqlgen](https://github.com/arsmn/gqlgen) ## πŸ’¬ Media - [Welcome to Fiber β€” an Express.js styled web framework written in Go with ❀️](https://dev.to/koddr/welcome-to-fiber-an-express-js-styled-fastest-web-framework-written-with-on-golang-497) β€” _03 Feb 2020_ - [Fiber released v1.7! πŸŽ‰ What's new and is it still fast, flexible and friendly?](https://dev.to/koddr/fiber-v2-is-out-now-what-s-new-and-is-he-still-fast-flexible-and-friendly-3ipf) β€” _21 Feb 2020_ - [πŸš€ Fiber v1.8. What's new, updated and re-thinked?](https://dev.to/koddr/fiber-v1-8-what-s-new-updated-and-re-thinked-339h) β€” _03 Mar 2020_ - [Is switching from Express to Fiber worth it? πŸ€”](https://dev.to/koddr/are-sure-what-your-lovely-web-framework-running-so-fast-2jl1) β€” _01 Apr 2020_ - [Creating Fast APIs In Go Using Fiber](https://dev.to/jozsefsallai/creating-fast-apis-in-go-using-fiber-59m9) β€” _07 Apr 2020_ - [Building a Basic REST API in Go using Fiber](https://tutorialedge.net/golang/basic-rest-api-go-fiber/) - _23 Apr 2020_ - [πŸ“Ί Building a REST API using GORM and Fiber](https://youtu.be/Iq2qT0fRhAA) - _25 Apr 2020_ - [🌎 Create a travel list app with Go, Fiber, Angular, MongoDB and Google Cloud Secret Manager](https://blog.yongweilun.me/create-a-travel-list-app-with-go-fiber-angular-mongodb-and-google-cloud-secret-manager-ck9fgxy0p061pcss1xt1ubu8t) - _25 Apr 2020_ - [Fiber v1.9.6 πŸ”₯ How to improve performance by 817% and stay fast, flexible and friendly?](https://dev.to/koddr/fiber-v1-9-5-how-to-improve-performance-by-817-and-stay-fast-flexible-and-friendly-2dp6) - _12 May 2020_ - [The road to web-based authentication with Fiber ⚑](https://vugt.me/the-road-to-web-based-authentication-with-fiber/) - _20 May 2020_ - [Building an Express-style API in Go with Fiber](https://blog.logrocket.com/express-style-api-go-fiber/) - _10 June 2020_ ## πŸ‘ Bijdragen Om de actieve ontwikkelingen van `Fiber` te ondersteunen of om een **bedankje** te geven: 1. Voeg een [GitHub Star](https://github.com/gofiber/fiber/stargazers) toe aan het project. 2. Tweet over het project [op je Twitter account](https://twitter.com/intent/tweet?text=Fiber%20is%20an%20Express%20inspired%20%23web%20%23framework%20built%20on%20top%20of%20Fasthttp%2C%20the%20fastest%20HTTP%20engine%20for%20%23Go.%20Designed%20to%20ease%20things%20up%20for%20%23fast%20development%20with%20zero%20memory%20allocation%20and%20%23performance%20in%20mind%20%F0%9F%9A%80%20https%3A%2F%2Fgithub.com%2Fgofiber%2Ffiber). 3. Schrijf een recensie of tutorial op [Medium](https://medium.com/), [Dev.to](https://dev.to/) of een persoonlijke blog. 4. Help us to translate our API Documentation via [Crowdin](https://crowdin.com/project/gofiber) [![Crowdin](https://badges.crowdin.net/gofiber/localized.svg)](https://crowdin.com/project/gofiber) 5. Support the project by donating a [cup of coffee](https://buymeacoff.ee/fenny). ## β˜• Supporters Fiber is an open source project that runs on donations to pay the bills e.g. our domain name, gitbook, netlify and serverless hosting. If you want to support Fiber, you can β˜• [**buy a coffee here**](https://buymeacoff.ee/fenny). | | User | Donation | | :---------------------------------------------------------- | :----------------------------------------------- | :------- | | ![](https://avatars.githubusercontent.com/u/56607882?s=25 ) | [@thomasvvugt](https://github.com/thomasvvugt) | β˜• x 5 | | ![](https://avatars.githubusercontent.com/u/27820675?s=25 ) | [@hendratommy](https://github.com/hendratommy) | β˜• x 5 | | ![](https://avatars.githubusercontent.com/u/1094221?s=25 ) | [@ekaputra07](https://github.com/ekaputra07) | β˜• x 5 | | ![](https://avatars.githubusercontent.com/u/194590?s=25 ) | [@jorgefuertes](https://github.com/jorgefuertes) | β˜• x 5 | | ![](https://avatars.githubusercontent.com/u/186637?s=25 ) | [@candidosales](https://github.com/candidosales) | β˜• x 5 | | ![](https://avatars.githubusercontent.com/u/29659953?s=25 ) | [@l0nax](https://github.com/l0nax) | β˜• x 3 | | ![](https://avatars.githubusercontent.com/u/59947262?s=25 ) | [@ankush](https://github.com/ankush) | β˜• x 3 | | ![](https://avatars.githubusercontent.com/u/635852?s=25 ) | [@bihe](https://github.com/bihe) | β˜• x 3 | | ![](https://avatars.githubusercontent.com/u/307334?s=25 ) | [@justdave](https://github.com/justdave) | β˜• x 3 | | ![](https://avatars.githubusercontent.com/u/11155743?s=25 ) | [@koddr](https://github.com/koddr) | β˜• x 1 | | ![](https://avatars.githubusercontent.com/u/29042462?s=25 ) | [@lapolinar](https://github.com/lapolinar) | β˜• x 1 | | ![](https://avatars.githubusercontent.com/u/2978730?s=25 ) | [@diegowifi](https://github.com/diegowifi) | β˜• x 1 | | ![](https://avatars.githubusercontent.com/u/44171355?s=25 ) | [@ssimk0](https://github.com/ssimk0) | β˜• x 1 | | ![](https://avatars.githubusercontent.com/u/5638101?s=25 ) | [@raymayemir](https://github.com/raymayemir) | β˜• x 1 | | ![](https://avatars.githubusercontent.com/u/619996?s=25 ) | [@melkorm](https://github.com/melkorm) | β˜• x 1 | | ![](https://avatars.githubusercontent.com/u/31022056?s=25 ) | [@marvinjwendt](https://github.com/thomasvvugt) | β˜• x 1 | | ![](https://avatars.githubusercontent.com/u/31921460?s=25 ) | [@toishy](https://github.com/toishy) | β˜• x 1 | ## β€Žβ€πŸ’» Code Contributors Code Contributors ## ⭐️ Stargazers Stargazers over time ## ⚠️ License Copyright (c) 2019-present [Fenny](https://github.com/fenny) and [Contributors](https://github.com/gofiber/fiber/graphs/contributors). `Fiber` is free and open-source software licensed under the [MIT License](https://github.com/gofiber/fiber/blob/master/LICENSE). Official logo was created by [Vic ShΓ³stak](https://github.com/koddr) and distributed under [Creative Commons](https://creativecommons.org/licenses/by-sa/4.0/) license (CC BY-SA 4.0 International). **Third-party library licenses** - [schema](https://github.com/gorilla/schema/blob/master/LICENSE) - [fasthttp](https://github.com/valyala/fasthttp/blob/master/LICENSE) - [fasttemplate](https://github.com/valyala/fasttemplate/blob/master/LICENSE) - [bytebufferpool](https://github.com/valyala/bytebufferpool/blob/master/LICENSE)