Go Developer(gopher-academy.ir)
Gin Web Framework part 1
توی این دوره یا مجموعه مقالاتی که قرار منتشر کنم. میخوام در مورد Gin Web Framework صحبت کنم. در واقع می خوام از صفر تا صد این فرم ورک رو بهتون اموزش بدم.
فرم ورک Gin چیست؟
این فرم ورک با زبان گو نوشته شده است?. و از API های فرم ورک martini و با عملکرد بسیار بهتر و به لطف httprouter تا 40 برابر سریعتر بهره می برد. اگر به عملکرد و بهره وری خوب نیاز دارید.??
جین را دوست❤️ خواهید داشت.(البته ابن جمله از خودم نبود? از سایت اصلی بود)
ویژگی ها این فرم ورک:
- Fast
مسیریابی مبتنی بر درخت Radix ، استفاده memory foot print
- Middleware support
درخواست HTTP ورودی را می توان با زنجیره ای از میان افزارها و اقدامات نهایی انجام داد. به عنوان مثال: Logger ، Authorization ، GZIP و در آخر پیام را در DB ارسال کند.
- Crash-free
ابن فرم ورک می تواند اگر در هنگام درخواست HTTP دچار مشکل شود می تواند آن را بازیابی کند. به این ترتیب سرور شما همیشه در دسترس خواهد بود. به عنوان مثال - همچنین می توانید این خرابی را به Sentry گزارش دهد!
- JSON validation
ابن فرم ورک می تواند JSON یک درخواست را تجزیه و تأیید کند - به عنوان مثال ، بررسی مقادیر مورد نیاز
- Routes grouping
مسیرهای گروه ها می توانند بدون محدودیت عملکرد به صورت نامحدود تو در تو قرار بگیرند.
- Error management
ابن فرم ورک یک روش مناسب برای جمع آوری تمام خطاهایی که در هنگام درخواست HTTP رخ داده است فراهم می کند. در نهایت ، یک میان افزار می تواند آنها را در یک پرونده ورود به سیستم ، یک پایگاه داده بنویسد و آنها را از طریق شبکه ارسال کند.
- Rendering built-in
ابن فرم ورک استفاده آسان از API را برای ارائه JSON ، XML و HTML فراهم می کند.
- Extendable
ایجاد یک میان افزار جدید بسیار آسان است
لیستی از بنچمارک ها
توضیحات جدول
(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())
}
مطلبی دیگر از این انتشارات
پوینتر ها میتونن کد Go شما رو کند کنن!
مطلبی دیگر از این انتشارات
چرا GoLang ؟
مطلبی دیگر از این انتشارات
مشکلات کار با http.ResponseWriter توی گولنگ!