
إطار عمل بسيط وسهل الوصول إلى الويب
هام: الآن بحاجة إلى دعم الإصدار Go1.9+ ، والدعم Go Mod.
المستند: https://www.kancloud.cn/devfeel/dotweb/346608
دليل: https://github.com/devfeel/dotweb/blob/master/docs/guide.md
go get github.com/devfeel/dotweb
package main
import (
"fmt"
"github.com/devfeel/dotweb"
)
func main () {
//init DotApp
app := dotweb . New ()
//set log path
app . SetLogPath ( "/home/logs/wwwroot/" )
//set route
app . HttpServer . GET ( "/index" , func ( ctx dotweb. Context ) error {
return ctx . WriteString ( "welcome to my first web!" )
})
//begin server
fmt . Println ( "dotweb.StartServer begin" )
err := app . StartServer ( 80 )
fmt . Println ( "dotweb.StartServer error => " , err )
}| dotweb | 1.9.2 | 16core16g | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| وحدة المعالجة المركزية | ذاكرة | عينات | متوسط | متوسط | خط 90 ٪ | خط 95 ٪ | خط 99 ٪ | دقيقة | الأعلى | خطأ٪ | إنتاجية | تلقى كيلو بايت/ثانية | إرسال kb/sec |
| 40 ٪ | 39m | 15228356 | 19 | 4 | 43 | 72 | 204 | 0 | 2070 | 0.00 ٪ | 48703.47 | 7514.79 | 8656.28 |
| 40 ٪ | 42 م | 15485189 | 18 | 4 | 41 | 63 | 230 | 0 | 3250 | 0.00 ٪ | 49512.99 | 7639.7 | 8800.16 |
| 40 ٪ | 44 م | 15700385 | 18 | 3 | 41 | 64 | 233 | 0 | 2083 | 0.00 ٪ | 50203.32 | 7746.22 | 8922.86 |
| صدى | 1.9.2 | 16core16g | |||||||||||
| وحدة المعالجة المركزية | ذاكرة | عينات | متوسط | متوسط | خط 90 ٪ | خط 95 ٪ | خط 99 ٪ | دقيقة | الأعلى | خطأ٪ | إنتاجية | تلقى كيلو بايت/ثانية | إرسال kb/sec |
| 38 ٪ | 35m | 15307586 | 19 | 4 | 44 | 76 | 181 | 0 | 1808 | 0.00 ٪ | 48951.22 | 6166.71 | 9034.94 |
| 36 ٪ | 35m | 15239058 | 19 | 4 | 45 | 76 | 178 | 0 | 2003 | 0.00 ٪ | 48734.26 | 6139.37 | 8994.9 |
| 37 ٪ | 37 م | 15800585 | 18 | 3 | 41 | 66 | 229 | 0 | 2355 | 0.00 ٪ | 50356.09 | 6343.68 | 9294.24 |
| شرك | 1.9.2 | 16core16g | |||||||||||
| وحدة المعالجة المركزية | ذاكرة | عينات | متوسط | متوسط | خط 90 ٪ | خط 95 ٪ | خط 99 ٪ | دقيقة | الأعلى | خطأ٪ | إنتاجية | تلقى كيلو بايت/ثانية | إرسال kb/sec |
| 36 ٪ | 36 م | 15109143 | 19 | 6 | 44 | 71 | 175 | 0 | 3250 | 0.00 ٪ | 48151.87 | 5877.91 | 8746.33 |
| 36 ٪ | 40 م | 15255749 | 19 | 5 | 43 | 70 | 189 | 0 | 3079 | 0.00 ٪ | 48762.53 | 5952.45 | 8857.25 |
| 36 ٪ | 40 م | 15385401 | 18 | 4 | 42 | 66 | 227 | 0 | 2312 | 0.00 ٪ | 49181.03 | 6003.54 | 8933.27 |
Router . GET ( path string , handle HttpHandle )
Router . POST ( path string , handle HttpHandle )
Router . HEAD ( path string , handle HttpHandle )
Router . OPTIONS ( path string , handle HttpHandle )
Router . PUT ( path string , handle HttpHandle )
Router . PATCH ( path string , handle HttpHandle )
Router . DELETE ( path string , handle HttpHandle )
Router . HiJack ( path string , handle HttpHandle )
Router . WebSocket ( path string , handle HttpHandle )
Router . Any ( path string , handle HttpHandle )
Router . RegisterRoute ( routeMethod string , path string , handle HttpHandle )
Router . RegisterHandler ( name string , handler HttpHandle )
Router. GetHandler ( name string ) ( HttpHandle , bool )
Router . MatchPath ( ctx Context , routePath string ) boolيقبل معلمتين ، إحداهما هو مسار URI والآخر هو نوع httphandle ، ويحدد الطريقة التي يتم تنفيذها عند مطابقة المسار ؛
بناء جملة التوجيه الثابت يعني أنه لا توجد متغيرات معلمة ، فإن النمط عبارة عن سلسلة ثابتة.
package main
import (
"github.com/devfeel/dotweb"
)
func main () {
dotapp := dotweb . New ()
dotapp . HttpServer . GET ( "/hello" , func ( ctx dotweb. Context ) error {
return ctx . WriteString ( "hello world!" )
})
dotapp . StartServer ( 80 )
}الاختبار: Curl http://127.0.0.1/hello
يتبع توجيه المعلمة سلسلة كاسم المعلمة. يمكنك الحصول على قيمة المعلمة التوجيه من خلال طريقة getRoutername لـ HTTPContext.
package main
import (
"github.com/devfeel/dotweb"
)
func main () {
dotapp := dotweb . New ()
dotapp . HttpServer . GET ( "/hello/:name" , func ( ctx dotweb. Context ) error {
return ctx . WriteString ( "hello " + ctx . GetRouterName ( "name" ))
})
dotapp . HttpServer . GET ( "/news/:category/:newsid" , func ( ctx dotweb. Context ) error {
category := ctx . GetRouterName ( "category" )
newsid := ctx . GetRouterName ( "newsid" )
return ctx . WriteString ( "news info: category=" + category + " newsid=" + newsid )
})
dotapp . StartServer ( 80 )
} امتحان:
Curl http://127.0.0.1/hello/devfeel
Curl http://127.0.0.1/hello/category1/1
g := server . Group ( "/user" )
g . GET ( "/" , Index )
g . GET ( "/profile" , Profile ) امتحان:
Curl http://127.0.0.1/user
Curl http://127.0.0.1/user/profile
type UserInfo struct {
UserName string `form:"user"`
Sex int `form:"sex"`
}
func TestBind ( ctx dotweb. HttpContext ) error {
user := new ( UserInfo )
if err := ctx . Bind ( user ); err != nil {
return ctx . WriteString ( "err => " + err . Error ())
} else {
return ctx . WriteString ( "TestBind " + fmt . Sprint ( user ))
}
} app . Use ( NewAccessFmtLog ( "app" ))
func InitRoute ( server * dotweb. HttpServer ) {
server . GET ( "/" , Index )
server . GET ( "/use" , Index ). Use ( NewAccessFmtLog ( "Router-use" ))
g := server . Group ( "/group" ). Use ( NewAccessFmtLog ( "group" ))
g . GET ( "/" , Index )
g . GET ( "/use" , Index ). Use ( NewAccessFmtLog ( "group-use" ))
}
type AccessFmtLog struct {
dotweb. BaseMiddlware
Index string
}
func ( m * AccessFmtLog ) Handle ( ctx dotweb. Context ) error {
fmt . Println ( time . Now (), "[AccessFmtLog " , m . Index , "] begin request -> " , ctx . Request . RequestURI )
err := m . Next ( ctx )
fmt . Println ( time . Now (), "[AccessFmtLog " , m . Index , "] finish request " , err , " -> " , ctx . Request . RequestURI )
return err
}
func NewAccessFmtLog ( index string ) * AccessFmtLog {
return & AccessFmtLog { Index : index }
}httpserver.enabledSession
تعيين ما إذا كان لتمكين دعم الجلسة. حاليًا ، يدعم أوضاع وقت التشغيل و redis ، ولا يتم تمكينه افتراضيًا.
httpserver.enabledgzip
تعيين ما إذا كان يجب تمكين دعم GZIP ، ولن يتم تمكينه افتراضيًا
httpserver.enabledlistdir
قم بتعيين ما إذا كنت لتمكين تصفح الدليل ، فهو صالح فقط لجهاز التوجيه. serverfile. إذا قمت بتعيين هذا العنصر ، فيمكنك تصفح ملفات الدليل ، ولا يتم تمكينه افتراضيًا.
httpserver.enabledautohead
تعيين ما إذا كان لتمكين توجيه توجيه الرأس تلقائيا. إذا تم تعيين هذا العنصر ، فسيتم إضافة طرق الرأس افتراضيًا لجميع طرق التوجيه باستثناء WebSocket Head. لن يتم تمكين وضع عدم التطوير افتراضيًا.
httpserver.enabletautooptions
اضبط ما إذا كان يجب تمكين التوجيه تلقائيًا. إذا تم تعيين هذا العنصر ، فسيتم إضافة خيارات توجيه افتراضيًا لجميع طرق التوجيه باستثناء WebSocket Head. لن يتم تمكين وضع عدم التطوير افتراضيًا.
httpserver.enabledignorefavicon
اضبط ما إذا كان يجب تجاهل طلب Favicon ، والذي يستخدم بشكل عام في مشاريع الواجهة
httpserver.enabledDetailRequestData
تعيين ما إذا كنت لتمكين إحصائيات بيانات الطلب التفصيلية ، الافتراضي خاطئ. إذا تم تعيين هذا العنصر ، فسيتم تمكين إحصائيات التفاصيل REVERQUESTURLDATA في ServerStateInfo.
httpserver.enabledtls
تعيين ما إذا كان لتمكين معالجة تشفير TLS
httpserver.enabledignorefavicon
اضبط ما إذا كان لتجاهل استجابة Favicon ، الافتراضي خاطئ. إذا تم تعيين هذا العنصر ، فسيتم تسجيل agnorefaviConModule المتكامل افتراضيًا وتنفيذها قبل سريان المسار.
httpserver.enabledbindusejsontag
تعيين ما إذا كان لتمكين علامة JSON لتكون فعالة على واجهة الربط ، يكون الافتراضي خطأ. إذا تم تعيين هذا العنصر ، فسيتم فحص علامة JSON عند تنفيذ الربط.
type ExceptionHandle func ( Context , error ) type NotFoundHandle func (http. ResponseWriter , * http. Request ) WebSocket - golang.org/x/net/websocket
redis - github.com/garyburd/redigo
Yaml - Gopkg.in/yaml.v2
تبعت التبعية الآن عن طريق GO Mod.
مقدمة المشروع: خدمة HTTP Long Connection Gateway ، وتوفير خدمات WebSocket وخدمات الاقتراع الطويلة
مقدمة المشروع: برنامج مدونة A GO يعتمد على dotweb و mapper
مقدمة المشروع: خادم مدونة Go (Blog) استنادًا إلى dotweb
مقدمة المشروع: خدمة رمزية ، وتوفير خدمات الاتساق المميز وخدمات توليد الهوية العالمية ذات الصلة ، إلخ.
مقدمة المشروع: يتم استخدام خادم التحكم في WeChat Access Central Control لإدارة Access_tokens بشكل موحد من مختلف الحسابات العامة ، وتوفير واجهة موحدة للحصول على رموز الوصول وتنقية تلقائيًا.
مقدمة المشروع: قوالب مشاريع شاملة تستند إلى DotWeb و Dotlog و Mapper و Dottask و Cache و Database.