Fiber adalah kerangka kerja web terinspirasi yang dibangun di atas fasthttp, mesin HTTP tercepat untuk GO. Dirancang untuk meringankan hal -hal untuk pengembangan cepat dengan alokasi memori nol dan kinerja dalam pikiran.
Fiber V3 saat ini dalam beta dan di bawah pengembangan aktif. Meskipun menawarkan fitur -fitur baru yang menarik, harap dicatat bahwa itu mungkin tidak stabil untuk penggunaan produksi. Kami merekomendasikan tetap pada rilis stabil terbaru (v2.x) untuk aplikasi misi-kritis. Jika Anda memilih untuk menggunakan V3, bersiaplah untuk potensi bug dan memecahkan perubahan. Selalu periksa dokumentasi resmi dan rilis catatan untuk pembaruan dan lanjutkan dengan hati -hati. Happy Coding!
Serat membutuhkan GO versi 1.23 atau lebih tinggi untuk dijalankan. Jika Anda perlu menginstal atau meningkatkan GO, kunjungi halaman unduhan GO Resmi. Untuk mulai menyiapkan proyek Anda, buat direktori baru untuk proyek Anda dan menavigasi ke dalamnya. Kemudian, inisialisasi proyek Anda dengan modul GO dengan menjalankan perintah berikut di terminal Anda:
go mod init github.com/your/repoUntuk mempelajari lebih lanjut tentang modul GO dan cara kerjanya, Anda dapat memeriksa posting blog GO Modules.
Setelah menyiapkan proyek Anda, Anda dapat menginstal serat dengan perintah go get :
go get -u github.com/gofiber/fiber/v3Perintah ini mengambil paket serat dan menambahkannya ke dependensi proyek Anda, memungkinkan Anda untuk mulai membangun aplikasi web Anda dengan serat.
Memulai dengan serat itu mudah. Berikut adalah contoh dasar untuk membuat server web sederhana yang merespons dengan "Halo, Dunia!" di jalur root. Contoh ini menunjukkan menginisialisasi aplikasi serat baru, menyiapkan rute, dan memulai server.
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" ))
} Server sederhana ini mudah diatur dan dijalankan. Ini memperkenalkan konsep inti serat: inisialisasi aplikasi, definisi rute, dan memulai server. Cukup jalankan program GO ini, dan kunjungi http://localhost:3000 di browser Anda untuk melihat pesannya.
Serat dioptimalkan untuk kinerja tinggi , artinya nilai yang dikembalikan dari Fiber.ctx tidak dapat diubah secara default dan akan digunakan kembali di seluruh permintaan. Sebagai aturan praktis, Anda hanya harus menggunakan nilai konteks di dalam pawang dan tidak boleh menyimpan referensi apa pun. Setelah Anda kembali dari pawang, nilai apa pun yang diperoleh dari konteks akan digunakan kembali dalam permintaan mendatang. Kunjungi dokumentasi kami untuk mempelajari lebih lanjut.
Tes ini dilakukan oleh Techempower dan Go Web. Jika Anda ingin melihat semua hasilnya, silakan kunjungi wiki kami.
Gophers baru yang beralih dari node.js untuk pergi berurusan dengan kurva belajar sebelum mereka dapat mulai membangun aplikasi web atau layanan microservices. Serat, sebagai kerangka kerja web , diciptakan dengan gagasan minimalis dan mengikuti cara UNIX , sehingga Gophers baru dapat dengan cepat memasuki dunia Go dengan sambutan yang hangat dan tepercaya.
Serat terinspirasi oleh Express, kerangka kerja web paling populer di internet. Kami menggabungkan kemudahan kinerja go ekspres dan mentah . Jika Anda pernah menerapkan aplikasi web di Node.js ( menggunakan ekspres atau serupa ), maka banyak metode dan prinsip akan tampak sangat umum bagi Anda.
Kami mendengarkan pengguna kami dalam masalah, Saluran Perselisihan dan di seluruh internet untuk membuat kerangka kerja Go yang cepat , fleksibel , dan ramah untuk tugas, tenggat waktu , dan keterampilan pengembang apa pun ! Sama seperti Express di dunia JavaScript.
Di bawah ini adalah beberapa contoh umum. Jika Anda ingin melihat lebih banyak contoh kode, silakan kunjungi repositori resep kami atau kunjungi dokumentasi API yang kami hosting.
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" ))
}Render mesin konfigurasi
Default serat ke html/template saat tidak ada mesin tampilan diatur.
Jika Anda ingin menjalankan sebagian atau menggunakan mesin yang berbeda seperti Amber, setang, kumis, atau PUG, dll., Lihat paket templat kami yang mendukung beberapa mesin tampilan.
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" ))
}Kelompok
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" ))
}Logger
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" ))
}CORS
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" ))
} Periksa CORS dengan melewati domain di header Origin :
curl -H " Origin: http://example.com " --verbose http://localhost:3000Metode HTTP
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
}Info lebih lanjut
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" ))
}Pulih
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" ))
}Konfigurasi
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" ))
}Berikut adalah daftar middleware yang termasuk dalam kerangka serat.
| Middleware | Keterangan |
|---|---|
| adaptor | Konverter untuk penangan net/http ke/dari penangan permintaan serat. |
| Basicauth | Menyediakan otentikasi dasar HTTP. Ini memanggil penangan berikutnya untuk kredensial yang valid dan 401 tidak sah karena kredensial yang hilang atau tidak valid. |
| cache | Menanggapi respons HTTP yang mencegat dan cache. |
| kompres | Kompresi middleware untuk serat, dengan dukungan untuk deflate , gzip , brotli dan zstd . |
| CORS | Aktifkan Berbagi Sumber Daya Cross-Origin (CORS) dengan berbagai opsi. |
| csrf | Lindungi dari eksploitasi CSRF. |
| EarlyData | Menambahkan dukungan untuk fitur data awal TLS 1.3 ("0-RTT"). |
| EncryptCookie | Mengenkripsi middleware yang mengenkripsi nilai cookie. |
| Envvar | Ekspos variabel lingkungan dengan menyediakan konfigurasi opsional. |
| Etag | Mengizinkan cache menjadi lebih efisien dan menyimpan bandwidth, karena server web tidak perlu mengirimkan respons penuh jika konten tidak berubah. |
| Expvar | Melayani melalui variabel http server runtime yang diekspos dalam format JSON. |
| Favicon | Abaikan Favicon dari log atau sajikan dari memori jika jalur file disediakan. |
| HealthCheck | Probe livitas dan kesiapan untuk serat. |
| helm | Membantu mengamankan aplikasi Anda dengan mengatur berbagai header HTTP. |
| Idempotency | Mengizinkan API toleran kesalahan di mana permintaan duplikat tidak secara keliru menyebabkan tindakan yang sama dilakukan beberapa kali di sisi server. |
| keyauth | Menambahkan dukungan untuk otentikasi berbasis kunci. |
| limiter | Menambahkan dukungan pembatas laju ke serat. Gunakan untuk membatasi permintaan berulang ke API publik dan/atau titik akhir seperti reset kata sandi. |
| logger | HTTP Request/Response Logger. |
| pprof | Melayani data profil runtime dalam format PPROF. |
| proxy | Memungkinkan Anda untuk permintaan proxy ke beberapa server. |
| pulih | Pemulihan dari panik di mana saja dalam rantai tumpukan dan menangani kontrol ke errorhandler terpusat. |
| Redirect | Redirect Middleware. |
| permintaan | Menambahkan ID permintaan ke setiap permintaan. |
| menulis kembali | Menulis ulang jalur URL berdasarkan aturan yang disediakan. Ini dapat bermanfaat untuk kompatibilitas mundur atau hanya membuat tautan yang lebih bersih dan lebih deskriptif. |
| sidang | Middleware sesi. Catatan: Middleware ini menggunakan paket penyimpanan kami. |
| melewati | Lewati middleware yang melewatkan pawang yang dibungkus jika predikat benar. |
| statis | Middleware statis untuk serat yang menyajikan file statis seperti gambar , CSS , dan JavaScript . |
| Batas waktu | Menambahkan waktu maksimal untuk permintaan dan meneruskan ke Errorhandler jika terlampaui. |
Daftar modul middleware yang di -host secara eksternal dan dikelola oleh tim serat.
| Middleware | Keterangan |
|---|---|
| kontribal | Middlewares pihak ketiga |
| penyimpanan | Driver penyimpanan premade yang mengimplementasikan antarmuka penyimpanan, yang dirancang untuk digunakan dengan berbagai tiddware serat. |
| templat | Paket ini berisi 9 mesin template yang dapat digunakan dengan serat v3 . GO Versi 1.23 atau lebih tinggi diperlukan. |
Untuk lebih banyak artikel, middleware, contoh, atau alat, periksa daftar kami yang luar biasa.
Jika Anda ingin mengucapkan terima kasih dan/atau mendukung pengembangan aktif Fiber :
Untuk memastikan kontribusi Anda siap untuk permintaan tarik, silakan gunakan perintah Makefile berikut. Alat -alat ini membantu menjaga kualitas dan konsistensi kode.
Jalankan perintah ini untuk memastikan kode Anda mematuhi standar proyek dan praktik terbaik.
Fiber adalah proyek open-source yang menjalankan sumbangan untuk membayar tagihan, misalnya, nama domain kami, GitBook, Netlify, dan hosting tanpa server. Jika Anda ingin mendukung serat, Anda dapat ☕ Membeli kopi di sini .
| Pengguna | Sumbangan | |
|---|---|---|
| @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 |
Hak Cipta (C) 2019-sekarang Fenny dan kontributor. Fiber bebas dan perangkat lunak sumber terbuka yang dilisensikan di bawah lisensi MIT. Logo resmi dibuat oleh Vic Shóstak dan didistribusikan di bawah Lisensi Creative Commons (CC BY-SA 4.0 International).