Fiber هو إطار عمل مستوحى من الويب مستوحى من FasthTTP ، أسرع محرك HTTP لـ GO. تم تصميمه لتخفيف الأمور للتطوير السريع مع وضع تخصيص ذاكرة صفري وأداء في الاعتبار.
الألياف V3 موجودة حاليًا في الإصدار التجريبي وتحت التطوير النشط. على الرغم من أنه يوفر ميزات جديدة مثيرة ، يرجى ملاحظة أنه قد لا يكون مستقرًا للاستخدام الإنتاجي. نوصي بالالتزام بأحدث إصدار مستقر (v2.x) للتطبيقات المهمة. إذا اخترت استخدام V3 ، كن مستعدًا للحشرات المحتملة وكسر التغييرات. تحقق دائمًا من الوثائق الرسمية وملاحظات الإصدار للحصول على التحديثات ومتابعة الحذر. ترميز سعيد!
تتطلب الألياف GO الإصدار 1.23 أو أعلى لتشغيله. إذا كنت بحاجة إلى تثبيت أو ترقية GO ، تفضل بزيارة صفحة تنزيل GO الرسمية. للبدء في إعداد مشروعك ، قم بإنشاء دليل جديد لمشروعك والتنقل فيه. ثم ، قم بتهيئة مشروعك باستخدام وحدات GO من خلال تنفيذ الأمر التالي في المحطة الخاصة بك:
go mod init github.com/your/repoلمعرفة المزيد حول وحدات GO وكيفية عملها ، يمكنك التحقق من منشور مدونة استخدام وحدات GO.
بعد إعداد مشروعك ، يمكنك تثبيت الألياف باستخدام أمر go get :
go get -u github.com/gofiber/fiber/v3يجلب هذا الأمر حزمة الألياف ويضيفها إلى تبعيات مشروعك ، مما يتيح لك البدء في بناء تطبيقات الويب الخاصة بك بالألياف.
البدء مع الألياف أمر سهل. إليك مثال أساسي لإنشاء خادم ويب بسيط يستجيب بـ "Hello ، World!" على مسار الجذر. يوضح هذا المثال تهيئة تطبيق ألياف جديد ، وإعداد مسار ، وبدء تشغيل الخادم.
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 في متصفحك لرؤية الرسالة.
تم تحسين الألياف من أجل الأداء العالي ، مما يعني أن القيم التي يتم إرجاعها من الألياف . كقاعدة عامة ، يجب عليك فقط استخدام قيم السياق داخل المعالج ويجب ألا تحتفظ بأي مراجع. بمجرد العودة من المعالج ، سيتم إعادة استخدام أي قيم تم الحصول عليها من السياق في الطلبات المستقبلية. قم بزيارة وثائقنا لمعرفة المزيد.
يتم تنفيذ هذه الاختبارات بواسطة TechEmpower و GO Web. إذا كنت تريد رؤية جميع النتائج ، فيرجى زيارة ويكي.
يتعامل Gophers الجديد الذي يقوم بالتبديل من Node.js للذهاب مع منحنى التعلم قبل أن يتمكنوا من البدء في بناء تطبيقات الويب الخاصة بهم أو الخدمات الصغيرة. تم إنشاء Fiber ، كإطار عمل على شبكة الإنترنت ، بفكرة الحد الأدنى وتتبع طريقة UNIX ، بحيث يمكن لـ Gophers الجدد الدخول بسرعة إلى عالم GO مع ترحيب دافئ وموثوق به.
الألياف مستوحاة من Express ، إطار الويب الأكثر شعبية على الإنترنت. لقد جمعنا سهولة الأداء السريع والخام لـ GO. إذا كنت قد قمت بتطبيق تطبيق ويب في Node.js ( باستخدام Express أو ما شابه ذلك ) ، فستبدو العديد من الأساليب والمبادئ شائعة جدًا بالنسبة لك.
نستمع إلى مستخدمينا في القضايا وقناة Discord وجميع أنحاء الإنترنت لإنشاء إطار عمل سريع ومرن وودود لأي مهمة ومهارات الموعد النهائي ومهارة المطور! تمامًا مثل Express في عالم JavaScript.
المدرجة أدناه هي بعض الأمثلة الشائعة. إذا كنت ترغب في رؤية المزيد من أمثلة التعليمات البرمجية ، فيرجى زيارة مستودع الوصفات أو زيارة وثائق 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/قالب عند عدم تعيين محرك عرض.
إذا كنت ترغب في تنفيذ الجزئية أو استخدام محرك مختلف مثل العنبر أو المقاود أو الشارب أو الصلصال ، وما إلى ذلك ، تحقق من حزمة القالب التي تدعم محركات العرض المتعددة.
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:3000أساليب 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" ))
}جيسون
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 إلى/من معالجات طلب الألياف. |
| Basicauth | يوفر مصادقة HTTP الأساسية. يستدعي المعالج التالي لبيانات الاعتماد الصحيحة و 401 غير مصرح بها لأوراق اعتماد مفقودة أو غير صالحة. |
| مخبأ | اعتراض وذاكرة التخزين المؤقت استجابات HTTP. |
| ضغط | plidgerparting الوسيطة للألياف ، مع دعم deflate و gzip و brotli و zstd . |
| كورس | تمكين مشاركة الموارد عبر الأصل (CORS) مع خيارات مختلفة. |
| CSRF | حماية من مآثر CSRF. |
| اوكراتا | يضيف دعم ميزة TLS 1.3 المبكرة ("0-RTT"). |
| encryptcookie | تشفير البرامج الوسيطة التي تشفر قيم ملفات تعريف الارتباط. |
| Envvar | فضح متغيرات البيئة مع توفير تكوين اختياري. |
| etag | يسمح بتخزين المؤقتة أن تكون أكثر كفاءة وحفظ النطاق الترددي ، حيث لا يحتاج خادم الويب إلى إعادة تقديم استجابة كاملة إذا لم يتغير المحتوى. |
| expvar | يخدم عبر متغيرات تشغيل خادم HTTP الخاصة به في تنسيق JSON. |
| فافيكون | تجاهل Favicon من السجلات أو الخدمة من الذاكرة إذا تم توفير مسار ملف. |
| HealthCheck | التحقيقات والاستعداد للألياف. |
| خوذة | يساعد على تأمين تطبيقاتك من خلال تعيين العديد من رؤوس HTTP. |
| التعبير | يسمح بواجهة برمجة التطبيقات التي تتحمل الأخطاء حيث لا تتسبب الطلبات المكررة عن طريق الخطأ في نفس الإجراء الذي يتم إجراؤه عدة مرات على جانب الخادم. |
| Keyauth | يضيف الدعم للمصادقة القائمة على المفتاح. |
| محدد | يضيف الدعم المحدد للمعدل للألياف. استخدم للحد من الطلبات المتكررة على واجهات برمجة التطبيقات العامة و/أو نقاط النهاية مثل إعادة تعيين كلمة المرور. |
| المسجل | HTTP طلب/استجابة المسجل. |
| PPROF | يخدم بيانات التنميط في وقت التشغيل بتنسيق PPROF. |
| الوكيل | يسمح لك بطلبات الوكيل إلى خوادم متعددة. |
| استرداد | يتعافى من الذعر في أي مكان في سلسلة المكدس ويتولى التحكم في HORREARDLER المركزية. |
| إعادة توجيه | إعادة توجيه الوسيطة. |
| طلب | يضيف معرف طلب إلى كل طلب. |
| أعد كتابة | أعد كتابة مسار عنوان URL بناءً على القواعد المقدمة. يمكن أن يكون مفيدًا للتوافق المتخلف أو مجرد إنشاء روابط أنظف وأكثر وصفية. |
| حصة | الوسيطة الجلسة. ملاحظة: يستخدم هذا الوسيطة حزمة التخزين الخاصة بنا. |
| يتخطى | تخطي البرامج الوسيطة التي تتخطى معالجًا ملفوفًا إذا كان المسند صحيحًا. |
| ثابت | البرامج الوسيطة الثابتة للألياف التي تخدم ملفات ثابتة مثل الصور و CSS و JavaScript . |
| نفذ الوقت | يضيف وقتًا كحد أقصى للطلب وإعادة التوجيه إلى ErrorHandler إذا تم تجاوزه. |
قائمة وحدات الوسيطة المستضافة خارجيا والمحافظة عليها فريق الألياف.
| الوسيطة | وصف |
|---|---|
| مساهمة | الطرف الثالث الأوسط |
| تخزين | برامج تشغيل التخزين المؤهلة التي تنفذ واجهة التخزين ، المصممة لاستخدامها مع العديد من الألياف المتوسطة. |
| نموذج | تحتوي هذه الحزمة على 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 |
حقوق الطبع والنشر (C) 2019-Fenny والمساهمين. Fiber مجانية ومفتوحة المصدر مرخصة بموجب ترخيص معهد ماساتشوستس للتكنولوجيا. تم إنشاء الشعار الرسمي بواسطة Vic Shóstak وتم توزيعه بموجب ترخيص Creative Commons (CC BY-SA 4.0 International).