mrbardia72
mrbardia72
خواندن ۲ دقیقه·۴ سال پیش

Gin Web Framework part 4

Gin Web Framework part 4
Gin Web Framework part 4


درود دوستان امروز میخوام در مورد بخش چهارم از سری مقالات فرم ورک Gin صحبت کنیم

فهرست بخش چهارم از این مقاله

  • Grouping routes
  • Blank Gin without middleware by default
  • Using middleware
  • Custom Recovery behavior
  • How to write log file
  • Custom Log Format

میریم واسه توضیح هر بخش

قسمت اول Grouping routes

// Simple group: user v1 := router.Group(&quot/v1&quot){ v1.POST(&quot/login&quot, loginEndpoint) v1.POST(&quot/submit&quot, submitEndpoint) v1.PUT(&quot/change&quot, changeEndpoint) } // Simple group: food v2 := router.Group(&quot/v2&quot){ v2.GET(&quot/list&quot, llistEndpoint) v2.GET(&quot/search&quot, searchEndpoint) v2.POST(&quot/save&quot, saveEndpoint) }

یه زمانی پیش میاد توی برنامه نوشته شده تون تعداد روت های زیاد داشته باشید و بخواید مدیریت بهتری روی روت هاتون داشته باشید توی این فرم ورک می تونید از router.group همین طور که مشاهده می کنید در کد بالا استفاده کنید به خط ۲و۸ دقت کنید که apiهای food و user رو ازم هم جدا کردیم.

قسمت دوم Blank Gin without middleware by default

اگر بخواید از مدلویرهای Logger and Recovery استفاده نکنید از کد زیر در ابتدا برنامه تون استفاده کنید

r := gin.New()

اما اگر بخواید از مدلویرهای Logger and Recovery استفاده کنید از کد زیر در ابتدا برنامه تون استفاده کنید

r := gin.Default()

قسمت سوم Using middleware

در صورتی که بخواهید از Logger یا Recovery استفاده کنید به صورت زیر r.use استفاده کنید

r.Use(gin.Logger())
r.Use(gin.Recovery())

اگر بخواهیم به مجموعه از روت هامون میدلویر اختصاص بدیم به صورت زیر

authorized := r.Group("/", AuthRequired())

قسمت چهارم Custom Recovery behavior

خوب توی روش های بالا ما میدلیور خود فرم ورک رو استفاده می کردیم اما اگر بخواهیم یک نوع میدلویر از نوع recovery رو کاستوم کنیم به صورت زیر استفاده می کنیم

r.Use(gin.CustomRecovery(func(c *gin.Context, recovered interface{}) { i f err, ok := recovered.(string); ok { c.String(http.StatusInternalServerError, fmt.Sprintf(&quoterror: %s&quot, err)) } c.AbortWithStatus(http.StatusInternalServerError) } ))

قسمت پنجم How to write log file

گاهی اواقات نیازه ما لاگ ها رو اصلن بجای اینکه توی دیتابیس خاصی داشته باشیم توی فایل داشته باشیم

func main() { f, _ := os.Create(&quotgin.log&quot) gin.DefaultWriter = io.MultiWriter(f) router := gin.Default() router.GET(&quot/ping&quot, func(c *gin.Context) { c.String(200, &quotpong&quot) }) router.Run(&quot:8080&quot) }

خوب اگه با گولنگ و این فرم ورک(البته تا اینجای کار)آشنا باشید قشنگ میفهمید که کد بالا یه فایل رو ایجاد می کنه و با استفاده از خط سوم میاد تمام فعل و انفعالات رو توی فایل مدنظر ذخیره می کنه به همین راحتی

قسمت شش Custom Log Format

اگه بخوایم یک لاگ شخصی دورس کنیم یعنی بگیم مثلن من میخوام لاگ هام چنین چیزهای (که در کد زیر هست) داشته باشم. به صورت زیر و با استفاده از متدی که در خط اول هست gin.LoggerWithFormatter(func(param gin.LogFormatterParams) یک استرینگ دورس کنیم از لاگ ها که نیاز داریم این لاگ ها توی خط ۴ تا ۱۲ تعریف شده

router.Use(gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string { return fmt.Sprintf(&quot%s - [%s] \&quot%s %s %s %d %s \&quot%s\&quot %s\&quot\n&quot, param.ClientIP, param.TimeStamp.Format(time.RFC1123), param.Method, param.Path, param.Request.Proto, param.StatusCode, param.Latency, param.Request.UserAgent(), param.ErrorMessage, ) } ))


گوگولنگgogolang
Go Developer(gopher-academy.ir)
شاید از این پست‌ها خوشتان بیاید