Saeed Heydari
Saeed Heydari
خواندن ۳ دقیقه·۲ سال پیش

آموزش 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 بدون iota

const ( a = 0 b = 1 c = 2 )

ایجاد auto increment با iota

const ( 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


گوآموزشgolang
من سعید حیدری،برنامه نویس و طراح وب و از علاقه مندان دنیای گنو/لینوکس هستم. بک اند با لاراول وGolang و فرانت اند با vuejs, nuxtjs کار می کنم. همچنین به بلاکچین، هوش مصنوعی و اینترنت اشیا علاقه مندم.
شاید از این پست‌ها خوشتان بیاید