مقدمه ایی بر فریم ورک gin (gin-gonic web framework)
همونطور که میدونید یا نمیدونید gin-gonic یکی از فریم ورک های زبان go یا بهتره بگم golang هست و اگه نمیدونید فریم ورک چیه میتونید از لینک های زیر استفاده کنید :
https://en.wikipedia.org/wiki/Web_framework
https://zerotohero.ir/article/web-development/%D9%81%D8%B1%DB%8C%D9%85-%D9%88%D8%B1%DA%A9-%D9%88%D8%A8-%DA%86%DB%8C%D8%B3%D8%AA-%D9%88-%DA%86%D8%B1%D8%A7%D8%9F/
https://hackr.io/blog/what-is-frameworks
اگه بخواییم خیلی خلاصه بگیم فریم ورک یه چارچوب یا یه پایه است که باعث شده کارای تکراری که توی همه ی برنامه های اون حوزه(مثلا وب) انجام میشه رو انجام ندیم و از اونجایی که ما ادم های تنبلی هستیم و معمولا افراد با تجربه ایی این فریم ورک ها رو ساختن پس استفاده از اونا خیلی توصیه میشه چون باعث میشه درگیر یه سری کارای تکرای یا خیلی پایه ایی نشین.
حالا که تقریبا فهمیدیم فریم ورک چیه وقتشه که با gin که فریم ورک وب زبان go هست اشنا بشیم و یه سری نمونه کد بزنیم.
تعریفی که توی ریپوزیتوری اصلی خود gin هست اینه :
این لینک سایت رسمیشه و این لینکش توی گیت هابه
Gin is a web framework written in Go (Golang). It features a martini-like API with much better
performance, up to 40 times faster thanks to httprouter. If you need performance and good
productivity, you will love Gin.
به زبان ساده ، Gin یک میکرو فریم ورک Go مبتنی بر httprouter که خدمات API مشابه martini (یکی دیگه از فریم ورک های go) اما با عملکرد بهتره.
جین سرعت بالایی داره و دارای قابلیت های خیلی خوبی مثل مدیریت ارور (error handling)، پشتیبانی از میان افزار ها (Middlewares) و پردازش json برخورداره که باعث میشه سرعتتون بالا بره و به همین دلایله که استفاده ازش توصیه میشه.
میتونیم از نتایج بنچ مارک چنتا از فریم ورک های go برای مقایسه gin با بقیه فریم ورک های رقیبش هم که توی ریپوزیتوریه اصلیش اومده هم استفاده کنیم که جوری که این امار نشون میده مثل اینکه gin نسبت به بقیه فریم ورک ها امتیاز بیشتری داره.
البته گفتن این نکته ضروریه که این چنین مقایسه ها ممکنه یه جور جبهه گیری بوجود بیارن که خیلی عوامل دیگه روی سرعت و کیفیت یه API تاثیر گذارن که فقط یکیشون فریم ورکه پس اینجور مقایسه ها زیادم مهم نیستن.
خب حالا وقتش رسیده یه خورده کد بزنیم ببینیم چطور کار میکنه :
اول از همه باید خود زبان go رو روی سیستمتون نصب کرده باشید . اگه نصبش نکردید میتونید از سایت اصلیش دانلود کنید و نصب کنید :
https://golang.org/doc/install
بعدش یه پوشه میسازیم و go mod init go-intro رو میزنیم تا پروژمون initialize بشه و بتونیم پروژمون رو پکیج بندی کنیم و در نهایت باید gin رو با استفاده از go نصب کنید که یه چیزی شبیه به زیر میشه :
حالا یه فایل به اسم main.go بسازید و با یه ادیتور اونو باز کنید و کدای زیر رو توش بنویسین :
توی خط اول که پکیجو برای گو تعریف کردیم که با توجه به اینکه برنامه ما از تابع main . پکیج main اجرا میشه پس اسم پکیجو main میذاریم.
توی خط سوم gin رو که از طریق go get نصب کرده بودیم رو ایمپورت میکنیم تا بتونیم از function ها و struct هاش استفاده کنیم.
توی خط ۷ ام ما یه متغیر به اسم router تعریف و مقدار دهی کردیم که همون روترمون هست و فانکشن دیفالت در واقع یه روتر میده میده که شامل دوتا میان افزار middleware خودشه.
حالا روتر ما یه سری فانکشن داره که همون متد های http ان مثل POST, GET, PUT, PATCH, DELETE, ... که هرکدومو که بزنید آرگمان اول یه رشته میگیره که همون مسیره api و پارامتر دوم یه فانکشنه که اینجا میشد یه فانکشن توی همین فایل ( یا کلا توی پکیج دیگه ) تعریف کرد بعد فقط اسمشو نوشت . مثل چیزی که این پایین نوشتم :
اگه درست نمیدونید پروتوکل http چیه و متداش به چه دردی میخورن میتونید از این لینکایی که گذاشتم استفاده کنید :
https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview
https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
توی کد بالا فانکشن هایی که به عنوان ورودی به یکی از متد های router اضافه میشن یه ارگمان میگیرن از جنس(خود) gin.Contex که یه struct از gin که یه سری متد داره برای خروجی دادن(به انواع فرمت ها که الان ما json رو انتخاب کردیم) و گرفتن ورودی(کوری پارامتر ها یا دیتا هایی که توی body ارسال میشن) که بعدا باهاشون کار میکنیم و آرگمان اولی که به فانکشن JSON دادیم (200) همون http Status Code ما هست که اینجا موفقیت امیز بوده برای همین 200 . لیست status code ها رو میتونید اینجا ببینید.
حالا اگه دستور go run main.go رو بزنیم برنامه مون اجرا میشه :
و میتونید توی مرورگرتون localhost:8080/home رو بزنید تا خروجی رو بهتون نشون بده.
این لاگ هایی که توی ترمینال میبینید در واقع به خواطر یه middleware که توی خود gin هست و بالا تر که گفتم router.Default شامل ۲ تا middleware میشه یکیشون همینه اسمش logger حالا بعدا خودمون میتونیم middleware تعریف کنیم و استفاده کنیم.
خب حالا ما یه api خیلی ساده ساختیم که فقط یه api داره اونم یه json خروجی میده. برای اینکه api پیشرفته ایی بسازیم باید یه سری ساختار و پوشه بندی(پکیج) به برنامه مون اضافه کنیم که ما از معماری MVC برای ساخت api هامون استفاده میکنیم که همون ساختارمونه.
حالا اگه نمیدونید فرمت json چطوریه میتونید از لینکهای زیر استفاده کنید:
https://www.w3schools.com/whatis/whatis_json.asp
https://blog.faradars.org/json-overview/
و اگه نمیدونید معماری MVC چطوره و middleware کجای کار قرار میگیره از لینکای زیر استفاده کنید:
https://blog.faradars.org/mvc-%DA%86%DB%8C%D8%B3%D8%AA-%D8%9F/
https://www.educative.io/blog/mvc-tutorial
در ادامه سعی میکنم طی چند قسمت چگونگی ساخت یه api نسبتا پیشرفته رو توضیح بدم.
شاد و موفق باشید.
مطلبی دیگر از این انتشارات
الو، Docker؟ (ارتباط GoLang با api داکر)
مطلبی دیگر از این انتشارات
پوینترها در زبان گو
مطلبی دیگر از این انتشارات
چرا به Go2 نیازی نداریم ؟