1.5.1 متغیر (Variable) #
در برنامهنویسی رایانه، یک متغیر یک مکان در حافظه (آدرس حافظه) است که دارای یک نام نمادین با عنوان میباشد و میتواند حاوی اطلاعات یا یک مقدار معلوم یا مجهول که به آن ارزش یا مقدار گفته میشود باشد. به زبان دیگر، متغیر در برنامهنویسی به فضایی که برای ذخیره دادهها کنار گذاشته شدهاست میگویند (به نقل از سایت ویکی پدیا)
تعریف یک متغیر رشته #
1package main
2
3import (
4 "fmt"
5)
6
7func main() {
8 var s string = "Hello World"
9 fmt.Println(s)
10}
- یک متغیر
با استفاده از کلید واژه
var
ایجاد کردیم. - نام متغیر
را
s
گذاشتیم - تایپ متغیر
را از نوع
string
تعیین کردیم - سپس با عملگر
=
مقدار متغیر را مشخص از نوع رشته تعیین کردیم. - رشته
"Hello World"
به عنوان مقدار متغیرs
می باشد و این مقدار در خانه مشخصی از حافظه قرار گرفته - از پکیج استاندارد
fmt
برای چاپ مقدار متغیرs
استفاده کردیم که این پکیج یکسری توابع جهت انجام عملیات های مختلفی نظیر چاپ مقادیر را دارند که در کد بالا ما از تابعPrintln
استفاده کردیم.
1.5.1.1 اختصاص مقدار جدید به متغیر از قبل ایجاد شده #
در کد زیر ما یک متغیر از قبل تعریف کردیم و مقدار جدید را در خط ۹ به متغیر اختصاص دادیم.
1package main
2
3import (
4 "fmt"
5)
6
7func main() {
8 var s string
9 s = "Hello World"
10 fmt.Println(s)
11}
زمانیکه شما یک متغیر بصورتvar s string
تعریف می کنید مقدار پیش فرض""
برای متغیر تعیین می شود.
1.5.1.2 اختصاص مقدار رشته به تایپ اشتباه #
در کد بالا ما یک متغیر
از نوع int
تعریف کردیم و در خط ۹ مقدار "One"
را به آن تخصیص دادیم و پس از اجرا با خطای cannot use "One" (type string) as type int in assignment
اینکه شما یک مقدار رشته را به تایپ اشتباه اختصاص دادید مواجه خواهید شد.
1.5.1.3 تعریف متغیر به صورت خلاصه #
زبان گو علاوه بر اینکه از کلید واژه
var
برای تعریف متغیر پشتیبانی می کند, از =:
می توانید یک متغیر
تعریف کنید و نیازی به مشخص کردن تایپ متغیر نمی باشد چون زبان گو بر اساس مقدار تعیین شده تایپ متغیر را تشخیص می دهد.
توجه کنید شما فقط داخل تابع می توانید به صورت مختصر متغیر تعریف کنید و جهت تعریف متغیر بصورت عمومی باید از
var
استفاده کنید.بهتر است برای تعریف متغیر داخل تابع از از روش مختصر استفاده کنید و متغیر با
var
بصورت عمومی در بدنه کد باشد.
1.5.1.4 تعریف چند متغیر در یک خط #
در زبان گو شما می توانید همزمان چند متغیر را در یک خط تعریف کنید که در زیر یک نمونه کد مثال زدیم :
1package main
2
3import "fmt"
4
5func main() {
6 a, b, c := "hello", 1, 1.5
7 var d, e, f = "world", 13, 24
8 fmt.Println(a, b, c, d, e, f)
9}
1.5.1.5 تعریف متغیر با مقدار پیش فرض #
در کد زیر ما یکسری متغیر با تایپ های مختلف تعریف کردیم که با مقدار پیش فرض ایجاد شده اند.
1package main
2
3import "fmt"
4
5func main() {
6 var i int
7 var f float32
8 var b bool
9 var s string
10 fmt.Printf("%v %v %v %q\n", i, f, b, s) //0 0 false ""
11}
1.5.2 مقدار ثابت (Constant) #
constant همانند متغیر ها با کلید واژه const
تعریف می شوند و مقدار بصورت const a string = "hello world"
می گیرند و با این تفاوت که constant در طول اجرای کد مقدارشان غیرقابل تغییر هست و این تضمین را به شما می کنند هیچ چیزی در طول اجرا باعث تاثیر در تغییر مقدار constant نشود.
1package main
2
3import (
4 "fmt"
5)
6
7const s string = "Hello World"
8
9func main() {
10 fmt.Println(s)
11}
همانطور که در فوق گفتیم شما نمی توانید Constant را مجدد مقدار دهی کنید و در زیر خطایی که رخ می دهد در زمان اجرا را قرار دادیم :
1.5.2.1 تعریف Constant بدون نیاز به تعیین تایپ #
در constant شما همانند متغییر می توانید یک const
به تعیین تایپ تعریف کنید و زبان گو در زمان اجرا با توجه به مقدارتان تایپ را تشخیص می دهد.
1const a = 1 //Default hidden type is int
2const b = "circle" //Default hidden type is string
3const c = 5.4 //Default hidden type is float64
4const d = true //Default hidden type is bool
5const e = 'a' //Default hidden type is rune
6const f = 3+5i //Default hidden type is complex128
1.5.3 نحوه مشاهده تایپ متغیر یا Constant #
در زیر ما با استفاده یکی از توابع پکیج fmt
نوع و مقدار متغیر یا constant ها را چاپ کردیم.
1package main
2
3import "fmt"
4
5// Named untyped constant
6const a = 123 //Default hidden type is int
7const b = "circle" //Default hidden type is string
8const c = 5.6 //Default hidden type is float64
9const d = true //Default hidden type is bool
10const e = 'a' //Default hidden type is rune
11const f = 3 + 5i //Default hidden type is complex8
12
13var u = 123 //Default hidden type is int
14var v = "circle" //Default hidden type is string
15var w = 5.6 //Default hidden type is float64
16var x = true //Default hidden type is bool
17var y = 'a' //Default hidden type is rune
18var z = 3 + 5i //Default hidden type is complex128
19
20func main() {
21 fmt.Println("")
22 fmt.Printf("Type: %T Value: %v\n", a, a)
23 fmt.Printf("Type: %T Value: %v\n", b, b)
24 fmt.Printf("Type: %T Value: %v\n", c, c)
25 fmt.Printf("Type: %T Value: %v\n", d, d)
26 fmt.Printf("Type: %T Value: %v\n", e, e)
27 fmt.Printf("Type: %T Value: %v\n", f, f)
28
29 fmt.Printf("Type: %T Value: %v\n", u, u)
30 fmt.Printf("Type: %T Value: %v\n", v, v)
31 fmt.Printf("Type: %T Value: %v\n", w, w)
32 fmt.Printf("Type: %T Value: %v\n", x, x)
33 fmt.Printf("Type: %T Value: %v\n", y, y)
34 fmt.Printf("Type: %T Value: %v\n", z, z)
35}
1.5.3.1 استفاده از iota در constant #
شناسه iota
فقط با constant قابل استفاده اس که با آن می توانید برای ایجاد اعداد auto increment استفاده کنید.
ایجاد auto increment بدون iota
:
ایجاد auto increment با iota
:
توجه کنید مقدار پیش فرض باiota
صفر می باشد و constant از نوعint
می باشد.
1.5.3.2 نحوه ایجاد enum #
از iota
و constant برای ایجاد enum استفاده می شود که در زیر یک نمونه کد برای ایجاد enum قرار دادیم.
1package main
2
3import "fmt"
4
5type Size uint8
6
7const (
8 small Size = iota
9 medium
10 large
11 extraLarge
12)
13
14func main() {
15 fmt.Println(small)
16 fmt.Println(medium)
17 fmt.Println(large)
18 fmt.Println(extraLarge)
19}
1.5.3.3 نادیده گرفتن مقدار اول iota #
وقتی که داریم از iota
استفاده میکنیم شاید هنگام استفاده از auto increament نیاز باشد مقدار اول را نادیده بگیریم. برای اینکار میتوان از _
استفاده کرد به شکل زیر :
1.5.3.4 خودآزمون iota #
خروجی کد زیر را در ذهن پیدا کنید و با اجرای کد صحت آن را بررسی کنید.
1package main
2
3import "fmt"
4
5func main() {
6 const (
7 A = iota
8 B
9 C
10 D = B + C
11 E
12 F
13 G = iota
14 H
15 I = H
16 J
17 K
18 )
19 fmt.Println(A, B, C, D, E, F, G, H, I, J, K)
20}
1.5.4 قوانین نام گذاری متغیر و constant #
در زیر ما یکسری قوانین جهت نام گذاری متغیر و constant تعریف کردیم :
- نام متغیر یا constant فقط با یک حرف انگلیسی یا
_
شروع می شود. - نام ها می تواند ترکیبی از اعداد و حروف انگلیسی یا
_
باشد. - زبان گو به حروف بزرگ و کوچک در نام ها حساس است و اگر شما
hello
یاHello
تعریف کنید ۲ تا متغیر یا constant متفاوت محسوب می شوند. - محدودیتی در تعداد حروف نام ها وجود ندارد ولی بهتر است از یک تعداد مطلوب و مشخصی برای نام ها استفاده کنید.
توجه داشته باشید اصولا اسم constant ها را با حروف بزرگ و خارج از function تعریف میکنند.
- با مشخص کردن اسم با حروف بزرگ هنگام استفاده از constant ها مشخص تر خواهد بود.
- از آنجایی که constant ها فقط امکان read یا همان خواندن را میدهند ممکن است در قسمت های مختلف به آن مقادیر نیاز داشته باشیم.
- به دلیل اینکه با هر بار فراخوانی function مانع از این شویم کامپایلر عملیات مقدار دهی const را دوباره انجام ندهد بهتر است آن را خارج از تابع تعریف کنیم.