
توی این دوره یا مجموعه مقالاتی که قرار منتشر کنم. میخوام در مورد Gin Web Framework صحبت کنم. در واقع می خوام از صفر تا صد این فرم ورک رو بهتون اموزش بدم.
این فرم ورک با زبان گو نوشته شده است?. و از API های فرم ورک martini و با عملکرد بسیار بهتر و به لطف httprouter تا 40 برابر سریعتر بهره می برد. اگر به عملکرد و بهره وری خوب نیاز دارید.??
جین را دوست❤️ خواهید داشت.(البته ابن جمله از خودم نبود? از سایت اصلی بود)
مسیریابی مبتنی بر درخت Radix ، استفاده memory foot print
درخواست HTTP ورودی را می توان با زنجیره ای از میان افزارها و اقدامات نهایی انجام داد. به عنوان مثال: Logger ، Authorization ، GZIP و در آخر پیام را در DB ارسال کند.
ابن فرم ورک می تواند اگر در هنگام درخواست HTTP دچار مشکل شود می تواند آن را بازیابی کند. به این ترتیب سرور شما همیشه در دسترس خواهد بود. به عنوان مثال - همچنین می توانید این خرابی را به Sentry گزارش دهد!
ابن فرم ورک می تواند JSON یک درخواست را تجزیه و تأیید کند - به عنوان مثال ، بررسی مقادیر مورد نیاز
مسیرهای گروه ها می توانند بدون محدودیت عملکرد به صورت نامحدود تو در تو قرار بگیرند.
ابن فرم ورک یک روش مناسب برای جمع آوری تمام خطاهایی که در هنگام درخواست HTTP رخ داده است فراهم می کند. در نهایت ، یک میان افزار می تواند آنها را در یک پرونده ورود به سیستم ، یک پایگاه داده بنویسد و آنها را از طریق شبکه ارسال کند.
ابن فرم ورک استفاده آسان از API را برای ارائه JSON ، XML و HTML فراهم می کند.
ایجاد یک میان افزار جدید بسیار آسان است


توضیحات جدول
(1): کل تکرارها در زمان ثابت به دست می آیند ، بالاتر یعنی نتیجه با اطمینان تر
(2): مدت زمان تکرار (ns / op) ، پایین تر بهتر است
(3): این Heap Memory، پایین تر بهتر است
(4): میانگین تخصیص در هر بار تکرار (allocs / op) ، پایین تر بهتر است.
Go 1.9 or above
Go 1.7 or Go 1.8 will be no longer supported soon.
دستور زیر را توی ترمینال وارد کنید تا این فرم ورک نصب شه
go get -u github.com/gin-gonic/ginخوب یه فایل ایجاد کنید به اسم example.go و کد زیر رو بنویسید.
package main import "github.com/gin-gonic/gin" func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong",}) }) r.Run() }
برای شروع کار حتما باید یه نمونه از این فرم ورک رو نمونه برداری کنیم توی خط چهارم
توی خط پنجم اومدیم یه درخواستی از نوع get ایجاد کردیم به آدرس ping که در خروجی قرار یه رشته pong رو برامون چاپ کنه
خوب حالا دستور زیر رو میزنم
# run example.go and visit 0.0.0.0:8080/ping on browser$ go run example.go
اینم خروجی که ادرس 127.0.0.1/ping که خروجی رشته pong رو چاپ می کند
برای تست نویس باید از پکیج net/http/httptest استفاده کنید به صورت زیر
package main import ( "net/http" "net/http/httptest" "testing" "github.com/stretchr/testify/assert" ) func TestPingRoute(t *testing.T) { router := setupRouter() w := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/ping", nil) router.ServeHTTP(w, req) assert.Equal(t, 200, w.Code) assert.Equal(t, "pong", w.Body.String()) }