چطور یک وب سرویس ساده با Go بنویسیم

golang.orgچرا Go ؟زبان Go یک زبان قوی و سریع است که مستندات بسیار قوی و کاملی دارد که نمونه برنامه های زیادی در کاربرد های متنوعی برایش وجود دارداز مزیت هایی که این زبان میتوان به سادگی زبان از این ساده تریم داریم اصلا!جدا از این شوخی به نسبت زبان های C و ++C بدون شک این زبان برای پروژه های پیچیده میتواند انتخاب بهتری باشد منظور از ساده این است که شما کد حرفه ای را با همان قدرتمندی زبان C به صورتی ساده مینوسید در ادامه سادگی آن را خواهیم دیدهمروندیزبان go انتخاب بسیار خوبی برای برنامه نویسی همروند است با استفاده از goroutine ها میتوان thread های متنوع را به سادگی پیاده و از آن استفاده کرد...از کاربرد های این زبان میتوان در وببرنامه نویسی سیستمیشبکه...البته go برای برنامه های برنامه های Desktop , GUI-based زیاد مناسب نیستنصب Goلینوکس و مکبرای نصب در لینوکس و مک این اسکریپت را اجرا کنید ویندوزبه وبسایت golang.org بروید و پکیج مربوط به ویندوز را دانلود و نصب کنید و سپس Environment Variable تعریف کنید و ... این لیست آموزشی بسیار خوب است که اتفاقا آموزش نصب برای ویندوز را هم دارد اگر در هر مرحله ای از دانلود به تحریم لعنتی خوردید شکن میتواند کار راه انداز باشدمعماری نرم افزارمثل همیشه RESTful! بیشتر وبسرویس ها از معماری REST استفاده میکنند چون یک استاندارد برای معماری وب و پروتکل Http است پروتکل REST این ویژگی هارا داردLayered SystemCode On DemandCacheableUniform InterfaceStatelessClient-Serverالبته این پروتکل خود جای چند مقاله دارد ولی با این حال چون عنوان مطلب موضوعی دیگر است ناچار به مشاهده این عکس ادامه کار را پی میگیریمOpen Programmer با توجه به عکس ما در واقع یک درگاه درست میکنیم که از طریق آن هر وسیله ای که بتواند به شبکه متصل شود بتواند از طریق آن درگاه اطلاعات مختلفی دریافت کند این اطلاعات میتواند آدرس دنبال کنندگان ویرگول شما و یا میزان رطوبت خاک گلخانه شما باشد!در واقع ما در طرف سمت راست تصویر اطلاعات مختلف را به هر صورتی از هر جایی جمع آوری میکنیم و سپس بر اساس درخواست های مختلف در قالب هایی آن هارا ارائه می کنیمبرای مثال لطفا به تصویر زیر نگاه کنیدStack Overflowبرای دریافت لیست کل تصاویر که به هر صورتی از هر جایی جمع آوری شده فقط کافی است مثلا به آدرس 192.168.1.54 و مسیر photos/ برویملازم به ذکر است در این درخواست های فقط محدود به گرفتن یا به اصطلاح GET نمیشود درخواست هایی دیگر مانند فرستادن(POST)حذف(DELETE)بروزرسانی(UPDATE)...وجود داردخب دیگه واقعا بریم سر اصل مطلب پیاده سازیابتدا یک فولدر ایجاد میکنیم mkdir -p $GOPATH/src/github/{your username}/rest-api سپس وارد آن میشویم cd rest-api مسیر یاب(Router)ما از کتابخوانه mux برای اینکار استفاده میکنیمابتدا کتابخوانه را دریافت میکنیم go get github.com/gorilla/mux یک فایل به نام main.go ایجاد و کد زیر را مینوسیم package main import ( "encoding/json" "log" "net/http" "github.com/gorilla/mux" ) // our main function func main() { router := mux.NewRouter() log.Fatal(http.ListenAndServe(":8000", router)) }حالا لازم است مسیر هایی که میخواهیم را در main تعریف کنیم به این صورت // fun main() func main() { router := mux.NewRouter() router.HandleFunc("/people", GetPeople).Methods("GET") router.HandleFunc("/people/{id}", GetPerson).Methods("GET") router.HandleFunc("/people/{id}", CreatePerson).Methods("POST") router.HandleFunc("/people/{id}", DeletePerson).Methods("DELETE") log.Fatal(http.ListenAndServe(":8000", router)) } حالا برنامه را اجرا میکنیم go build ./rest-api اگر خطا گرفتید پس تا اینجا درست رفته اید حالا باید برای هر یک از مسیر هایی که داخل main تعریف کرده ایم یک تابع می نویسیم func GetPeople(w http.ResponseWriter, r *http.Request) {} func GetPerson(w http.ResponseWriter, r *http.Request) {} func CreatePerson(w http.ResponseWriter, r *http.Request) {} func DeletePerson(w http.ResponseWriter, r *http.Request) {} حال ساختار های زیر را در main.go بعد از بخش فراخوانی کتابخوانه ها تعریف میکنیم type Person struct { ID string `json:"id,omitempty"` Firstname string `json:"firstname,omitempty"` Lastname string `json:"lastname,omitempty"` Address *Address `json:"address,omitempty"` } type Address struct { City string `json:"city,omitempty"` State string `json:"state,omitempty"` } var people []Person خب تبریک میگم شما ساختار هارا تعریف کردید!حالا یک سری داده پیش فرض در ساختار هایی که تعریف کرده ایم وارد میکنیمدر فایل main.go کد های زیر را بنویسید func GetPeople(w http.ResponseWriter, r *http.Request) { json.NewEncoder(w).Encode(people) }یکبار دیگر build و اجرا کنید go build && ./rest-api حالا لطفا به آدرس http://localhost:8080 بروید خب بسیار عالی شما باید لیست همه افرادی را که وارد کرده اید دریافت کنیدگرفتن اطلاعات یک فرددر فایل main.go کد های زیر را بنویسید func GetPerson(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) for _, item := range people { if item.ID == params["id"] } } ایجاد فرد جدیددر فایل main.go کد های زیر را بنویسید func CreatePerson(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) var person Person _ = json.NewDecoder(r.Body).Decode(&person) person.ID = params["id"] people = append(people, person) json.NewEncoder(w).Encode(people) } حذف یک فرد در فایل main.go کد های زیر را بنویسید func DeletePerson(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) for index, item := range people { if item.ID == params["id"] { people = append(people[:index], people[index+1]...) break } json.NewEncoder(w).Encode(people) } }اگر هم مشکلی جایی وجود دارد که دلیلش را نمی دانید مخرن این پروژه در گیت هاب استبرای تست route هایی که میتوانید از Postman استفاده کنید همچنین برای نمایش بهتر خروجی ها از این افزونه داخل کروم هم میتوانید استفاده کنیدلازم به ذکر است همانطور که اول مطلب گفته شد زبان Go نسبت به c++,c بسیار ساده تر است البته این آموزش یک مثال خیلی خیلی ساده از استفاده این زبان بود امروز کتابخوانه های بسیار قوی تر برای بستر های بزرگتر توسعه داده شده است که میتوان از آن ها استفاده کردمنابعcodementor.ioquora.comstackoverflow.comکم و کاستی های فروان این مطلب را بر ما ببخشید لطفا نظرات خود را حتما لطفا اینجا بگذارید