الإطار الجيد
لقطة شاشة لمقاييس اختبار Gramework طويلة المدى تم إنشاؤها باستخدام لوحة معلومات Gramework Stats والبرمجيات الوسيطة للمقاييس
Gramework هو إطار عمل ويب سريع، وفعال للغاية، وموثوق، وأول SPA، تم إنشاؤه بواسطة مشرف fasthttp. يمكنك الحصول على واجهة برمجة التطبيقات البسيطة والقوية، ونحن نتعامل مع التحسينات داخليًا. يسعدنا دائمًا رؤية طلبات الميزات الخاصة بك والعلاقات العامة.
أسباب استخدام Gramwork
Go >= 1.10.8 هو الإصدار الأقدم الذي تم اختباره ودعمه باستمرار.
إذا واجهت أي نقاط ضعف فلا تتردد في إرسالها عبر [email protected].
اسم | الرابط/الشارة |
---|---|
المستندات | GoDoc |
جيرا لدينا | جيرا |
تقرير الترخيص | تقرير |
سجل التغيير | سجل التغيير |
ادعمنا بالتبرع أو كن راعياً | OpenCollective |
دردشة برقية لدينا | @gramwork |
قناتنا #gramwork في Gophers Slack | https://gophers.slack.com |
خادم الديسكورد الخاص بنا | https://discord.gg/HkW8DsD |
تغطية الفرع الرئيسي | |
حالة الفرع الرئيسي | |
تغطية فرع التطوير | |
حالة فرع التطوير | |
أفضل ممارسات CII | |
لوحة معلومات إحصائيات القواعد النحوية لـ Grafana | https://grafana.com/dashboards/3422 |
دعم الاتصالات | عبر البريد الإلكتروني: [email protected] |
عبر مجتمع Telegram: @gramework |
هذا المشروع موجود بفضل مساهمينا الرائعين! [يساهم].
شكرا لجميع الداعمين لدينا! [كن داعمًا]
ادعم هذا المشروع من خلال أن تصبح راعياً. سيظهر شعارك هنا مع رابط لموقعك على الويب. [كن راعيًا]
/third_party_licenses/fasthttp
و /third_party_licenses/fasthttprouter
.nettls_*.go
، إصدارًا متكاملاً من caddytls، لأن استخدامه من خلال استيراد بسيط ليس خيارًا، ويعتمد القواعد النحوية على fasthttp
، وهو غير متوافق مع net/http
. في الالتزام الذي استندت إليه، العلبة مرخصة Apache-2.0
. تم وضع ترخيصها في /third_party_licenses/caddy
. @mholt يسمح لنا بنسخ الكود الموجود في هذا الريبو. المثال أدناه سيخدم "hello, grameworld". سيقوم Gramework بتسجيل علامة bind
نيابةً عنك، مما يسمح لك باختيار IP/منفذ آخر يجب أن يستمع إليه Gramework:
package main
import (
"github.com/gramework/gramework"
)
func main () {
app := gramework . New ()
app . GET ( "/" , "hello, grameworld" )
app . ListenAndServe ()
}
إذا كنت لا تريد دعم علامة bind
، فقم بتمرير وسيطة العنوان الاختيارية إلى ListenAndServe
.
ملاحظة : جميع الأمثلة أدناه سوف تسجل علامة bind
.
من الإصدار: 1.1.0-rc1
سيعرض المثال أدناه {"hello":"grameworld"}
من الخريطة. سيقوم Gramework بتسجيل علامة bind
نيابةً عنك، مما يسمح لك باختيار IP/منفذ آخر يجب أن يستمع إليه Gramework:
package main
import (
"github.com/gramework/gramework"
)
func main () {
app := gramework . New ()
app . GET ( "/" , func () map [ string ] interface {} {
return map [ string ] interface {}{
"hello" : "gramework" ,
}
})
app . ListenAndServe ()
}
من الإصدار: 1.1.0-rc1
سيخدم المثال أدناه {"hello":"grameworld"}
من البنية. سيقوم Gramework بتسجيل علامة bind
نيابةً عنك، مما يسمح لك باختيار IP/منفذ آخر يجب أن يستمع إليه Gramework:
package main
import (
"github.com/gramework/gramework"
)
type SomeResponse struct {
hello string
}
func main () {
app := gramework . New ()
app . GET ( "/" , func () interface {} {
return SomeResponse {
hello : "gramework" ,
}
})
app . ListenAndServe ()
}
سيقدم المثال أدناه ملفات ثابتة من ./files
:
package main
import (
"github.com/gramework/gramework"
)
func main () {
app := gramework . New ()
app . GET ( "/*any" , app . ServeDir ( "./files" ))
app . ListenAndServe ()
}
المثال أدناه سوف يخدم شريحة بايت:
package main
import (
"fmt"
"os"
"time"
"github.com/gramework/gramework"
)
type SomeData struct {
Name string
Age uint8
}
func main () {
app := gramework . New ()
d := SomeData {
Name : "Grame" ,
Age : 20 ,
}
// service-wide CORS. you can also instead of using middleware
// call ctx.CORS() manually
app . Use ( app . CORSMiddleware ())
app . GET ( "/someJSON" , func ( ctx * gramework. Context ) {
// send json, no metter if user asked for json, xml or anything else.
if err := ctx . JSON ( d ); err != nil {
// you can return err instead of manual checks and Err500() call.
// See next handler for example.
ctx . Err500 ()
}
})
app . GET ( "/simpleJSON" , func ( ctx * gramework. Context ) error {
return ctx . JSON ( d )
})
app . GET ( "/someData" , func ( ctx * gramework. Context ) error {
// send data in one of supported encodings user asked for.
// Now we support json, xml and csv. More coming soon.
sentType , err := ctx . Encode ( d )
if err != nil {
ctx . Logger . WithError ( err ). Error ( "could not process request" )
return err
}
ctx . Logger . WithField ( "sentType" , sentType ). Debug ( "some request-related message" )
return nil
})
// you can omit context if you want, return `interface{}`, `error` or both.
app . GET ( "/simplestJSON" , func () interface {} {
return d
})
// you can also use one of built-in types as a handler, we got you covered too
app . GET ( "/hostnameJSON" , fmt . Sprintf ( `{"hostname": %q}` , os . Hostname ()))
wait := make ( chan struct {})
go func () {
time . Sleep ( 10 * time . Minute )
app . Shutdown ()
wait <- struct {}{}
}()
app . ListenAndServe ()
// allow Shutdown() to stop the app properly.
// ListenAndServe will return before Shutdown(), so we should wait.
<- wait
}
يوضح هذا المثال كيفية الترحيل من fasthttp إلى القواعد النحوية دون إعادة كتابة معالجاتك.
package main
import (
"github.com/gramework/gramework"
"github.com/valyala/fasthttp"
)
func main () {
app := gramework . New ()
app . GET ( "/someJSON" , func ( ctx * fasthttp. RequestCtx ) {
ctx . WriteString ( "another data" )
})
app . ListenAndServe ()
}