آموزش golang - قدم هشتم: متغیرها و constant

سلام دوستاندر جلسات قبلی مفهوم متغیر رو توضیح دادم، حالا می خوام درمورد انواع روش های تعریف متغیر و constant (ثابت) توضیح بدم.تعریف متغیردر گو، می تونید از کلمه ی کلیدی var برای تعریف متغیر استفاده کنید.package main import &quotfmt&quot func main() { var s string = &quotHello World&quot fmt.Println(s) }همچنین می تونید ابتدا متغیر رو تعریف و سپس به اون مقدار بدید.package main import &quotfmt&quot func main() { var s string s := &quotHello World&quot fmt.Println(s) }همچنین می تونید متغیر رو خارج از بدنه ی تابع و به صورت عمومی تعریف کنید:package main import &quotfmt&quot var s string = &quotHello World&quot func main() { fmt.Println(s) }همچنین می تونید چندین متغیر رو توی یه خط تعریف کنید:package main import &quotfmt&quot func main() { var d, e, f = &quotworld&quot, 13, 24 fmt.Println(d, e, f) }اگه به متغیر مقدار ندید، با توجه به تایپی که داره مقدار پیشفرض میگیره مثلا برای رشته مقدار "" می گیره.تعریف متغیر به صورت مختصردر این روش بدون ذکر نوع متغیر و بدون استفاده از کلمه ی کلیدی var متغیر رو تعریف می کنیم و در همون هنگام بهش مقدار هم میدیم.این نوع تعریف متغیر فقط داخل تابع امکان پذیره و دسترسی به اون متغیر رو محدود به تابع می کنه.package main import &quotfmt&quot func main() { s := &quotHello World&quot fmt.Println(s) }مقدار ثابت (constant)مقدار ثابت (constant) مثل متغیر ها ولی با کلید واژه const تعریف میشن. تفاوتی که constant ها با سایر متغیرها داره اینه که در طول اجرای کد مقدار اون ها غیرقابل تغییر هست و این تضمین را به شما می کنن هیچ چیزی در طول اجرا باعث تغییر مقدار constant نمیشه و اگه در جایی مقدار اون رو تغییر بدید هنگام کامپایل ارور میده.package main import &quotfmt&quot func main() { const s string = &quotworld&quot fmt.Println(s) }تو گو می تونید بدون تعریف نوع یه مقدار ثابت تعریف کنید:package main import &quotfmt&quot func main() { const s = &quotworld&quot fmt.Println(s) }استفاده از iota در constantشناسه iota برای ایجاد اعداد auto increment (اعداد افزایشی) و فقط با constant قابل استفاده است. تایپ پیشفرض iota از نوع int و مقدار پیشفرض اون برابر صفر هست.ایجاد auto increment بدون iotaconst ( a = 0 b = 1 c = 2 )ایجاد auto increment با iotaconst ( a = iota // 0 b // 1 c // 2 )نحوه ایجاد enumمتغیرهای enum یه لیست ترتیبی هستن و یه جورایی برای دسته بندی یه نوع خاص و دادن اسامی مورد نظر به اون ها به کار میرن. مثلا میشه اسامی ماه های سال رو به صورت یه enum تعریف کرد و ازشون استفاده کرد.package main import &quotfmt&quot type Month uint8 const ( farvardin Month = iota ordibehesht khordad tir mordad shahrivar mehr aban azar day bahman esfand ) func main() { fmt.Println(bahman) fmt.Println(aban) fmt.Println(mordad) fmt.Println(farvardin) }نادیده گرفتن مقدار اول iotaوقتی که داریم از iota استفاده می‌کنیم شاید هنگام استفاده از auto increament نیاز باشد مقدار اول را نادیده بگیریم. برای اینکار می‌تونیم از _ استفاده کنیمconst ( _ = iota // ignore a // 1 b // 2 c // 3 )توجه داشته باشید اصولا اسم constant ها را با حروف بزرگ و خارج از function تعریف می‌کنن.تعریف constant ها با حروف بزرگ باعث میشه راحت تر اونا تشخیص بدیم.از آنجایی که constant ها فقط امکان read یا همان خواندن رو دارن ممکنه در قسمت های مختلف از اون ها استفاده بشه.به دلیل اینکه با هر بار فراخوانی function مانع از مقدار دهی دوباره ی کامپایلر به constant ها بشیم بهتره اون ها را خارج از تابع تعریف کنیم. https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-golang-%D9%82%D8%AF%D9%85-%D8%B5%D9%81%D8%B1-ufv22zb4j3bq https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-golang-%D8%A8%D8%AE%D8%B4-%D8%AF%D9%88%D9%85-wyvs1idjyan2 https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D8%B3%D9%88%D9%85-e3mxmjr1mp74 https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%DA%86%D9%87%D8%A7%D8%B1%D9%85-ydltpxgtgdlj https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%BE%D9%86%D8%AC%D9%85-regehw9odr8y https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D8%B4%D8%B4%D9%85-k6cpaqgybxz2 https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%87%D9%81%D8%AA%D9%85-jf9cn4h6fgri https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%86%D9%87%D9%85-%D8%AA%D8%A7%D8%A8%D8%B9-nat6a2yfyqe3