1.3.1 تایپ چیست؟ #
یک تایپ مشخص کننده نوع داده است، که به کامپایلر میگوید قرار است چه نوع داده ای داخل یک متغییر ذخیره گردد. زبان ها انواع تایپ های مختلفی به صورت پیشفرض دارند که میتوان از آنها داخل برنامه خود استفاده کرد. ما میتوانیم تایپ ها را به دو دسته کلی تعریف کنیم.
1.3.1.1 تایپ ایستا (Static Type) #
زبانی مثل زبان گو یک زبان تایپ ایستا است، یعنی وقتی ما یک داده ای از نوع عددی داخل یک متغیر تعریف میکنیم داخل همان متغیر امکان اضافه کردن داده ای غیر داده عددی وجود ندارد.
1.3.1.2 تایپ پویا (Dynamic Type) #
زبانهایی مثل PHP، JavaScript و … جزو زبانهای تایپ پویا هستند. یعنی وقتی یک متغیری از نوع عددی تعریف میکنیم میتوانیم به همان متغیر مقادیر دیگهای مثل مقادیر رشتهای اضافه کنیم.
برای اطلاعات بیشتر میتوان تایپ سیستم را داخل ویکیپدیا مطالعه کنید.
1.3.2 تایپها در زبان گو #
زبان گو مثل سایر زبانها یکسری تایپهای پایه دارد که در هر بخش از کد گو میتوانید استفاده کنید. در ادامه ما این تایپ ها را با مقادیر پیش فرضشان معرفی می کنیم.
تایپ | محدوده | مقدار پیش فرض یا مقدار صفر | حجم استفاده از حافظه |
---|---|---|---|
int | بستگی به معماری سیستم عامل که ۳۲ بیت یا ۶۴ بیت باشد | 0 | ۴ یا ۸ بایت |
int8 | 128- تا 127 | 0 | ۱ بایت |
int16 | 32768- تا 32767 | 0 | ۲ بایت |
int32 | 2147483648- تا 2147483647 | 0 | ۴ بایت |
int64 | 9223372036854775808- تا 9223372036854775807 | 0 | ۸ بایت |
uint | بستگی به معماری سیستم عامل که ۳۲ بیت یا ۶۴ بیت باشد | 0 | ۴ یا ۸ بایت |
uint8 | 0 تا 255 | 0 | ۱ بایت |
uint16 | 0 تا 65535 | 0 | ۲ بایت |
uint32 | 0 تا 6294967295 | 0 | ۴ بایت |
uint64 | 0 تا 18446744073709551615 | 0 | ۸ بایت |
uintptr | عدد خیلی بزرگ | 0 | ۸ بایت |
float32 | IEEE-754 | 0 | ۴ بایت |
float64 | IEEE-754 | 0 | ۸ بایت |
complex64 | - | 0+0i | ۸ بایت |
complex128 | - | 0+0i | ۱۶ بایت |
bool | - | false | ۱ بایت |
string | - | " " | ۱۶ بایت |
زبان گو بطور پیش فرض از دو نوع تایپ با نام مستعار پشتیبانی می کند :
- تایپ
byte
این تایپ نام مستعار برای تایپuint8
می باشد. - تایپ
rune
این تایپ نام مستعار برای تایپint32
می باشد.
1.3.3 سفارشیسازی تایپ(ها) #
- نامگذاری جدید : برای تایپهای رشتهای، عددی و بول، میتوان نام سفارشی جدید انتخاب و در پروژه استفاده کرد:
1
2/* type alias */
3
4// bul and bool define the same type.
5type bul = bool
6// content and string define the same type.
7type content = string
8// UI8, uint8 and byte define the same type.
9type UI8 = uint8
10// Word, rune and int32 define the same type.
11type Word = rune
- ایجاد تایپ جدید معادل یک تایپ موجود : همچنین میتوان از تایپهای موجود، یک نمونه جدید ایجاد کرد:
1/* type definition */
2
3// state and bool are two different types.
4type state bool
5// str and string are two different types.
6type str string
7// ID and uint64 are two different types.
8type ID uint64
9// decimal and float32 are two different types.
10type decimal float32
1.3.4 مقدار پیش فرض تایپ ها #
هر یک از تایپ ها در زبان گو دارای مقدار پیش فرضی می باشد که به شرح زیر است :
- تایپ بولین مقدار پیش فرضش false می باشد.
- تمامی تایپ اعداد (int, uint, float) مقدار پیش فرضش صفر می باشد.
- تایپ استرینگ مقدار پیش فرضش " " می باشد.
1.3.5 انواع مقادیر تایپ ها #
در زبان گو تایپ ها یکسری مقادیر مختلفی را دریافت می کنند که در زیر به این مقادیر می پردازیم.
1.3.5.1 تایپ بولین #
تایپ بولین فقط true
و false
را به عنوان مقدار دریافت می کند.
1.3.5.2 تایپ Integer #
تایپ اعداد ۴ نوع مقدار مختلف دریافت می کند که به ترتیب Decimal (پایه ۱۰), Octal (پایه ۸), Hex (پایه ۱۶) و Binrary (پایه ۲ یا دودویی) می باشد.
10xF // the hex form (starts with a "0x" or "0X")
20XF
3
4017 // the octal form (starts with a "0", "0o" or "0O")
50o17
60O17
7
80b1111 // the binary form (starts with a "0b" or "0B")
90B1111
10
1115 // the decimal form (starts without a "0")
1.3.5.3 تایپ Float #
تایپ Float چند نوع مقدار را دریافت می کند که به ترتیب مقدار ممیز شناور اعشاری ممکن است شامل یک قسمت صحیح اعشاری، یک نقطه اعشاری، یک قسمت کسری اعشاری، و یک قسمت توانی عدد صحیح (مبتنی بر 10) باشد.
11.23
201.23 // == 1.23
3.23
41.
5// An "e" or "E" starts the exponent part (10-based).
61.23e2 // == 123.0
7123E2 // == 12300.0
8123.E+2 // == 12300.0
91e-1 // == 0.1
10.1e0 // == 0.1
110010e-2 // == 0.1
120e+5 // == 0.0
1.3.5.4 تایپ rune #
تایپ rune یک تایپ با نام مستعار int32 می باشد که از تایپ های اعداد صحیح خاصی هستند. از rune برای ذخیره نقطه یونیکد یا حروف خاص استفاده می شود که در مثال زیر چند نمونه از اون رو قرار دادیم.
1// 141 is the octal representation of decimal number 97.
2'\141'
3// 61 is the hex representation of decimal number 97.
4'\x61'
5'\u0061'
6'\U00000061'
1package main
2
3func main() {
4 println('a' == 97)
5 println('a' == '\141')
6 println('a' == '\x61')
7 println('a' == '\u0061')
8 println('a' == '\U00000061')
9 println(0x61 == '\x61')
10 println('\u4f17' == '众')
11}
1.3.5.4 تایپ رشته (string) #
در زبان گو مقدار تایپ رشته بطور پیش فرض از نوع یونیکد UTF-8 می باشد.
همچنین رشته از کارکترهای خاص یونیکد مانند 0x0D
پشتیبانی می کند.
1.3.6 خوانایی بهتر اعداد با _ #
در زبان گو شما می توانید برای خوانایی بهتر اعداد چند رقمی، از _
برای جداسازی استفاده کنید.
1// Legal ones:
26_9 // == 69
30_33_77_22 // == 0337722
40x_Bad_Face // == 0xBadFace
50X_1F_FFP-16 // == 0X1FFFP-16
60b1011_0111 + 0xA_B.Fp2i
7
8// Illegal ones:
9_69 // _ can't appear as the first character
1069_ // _ can't appear as the last character
116__9 // one side of _ is a illegal character
120_xBadFace // "x" is not a legal octal digit
131_.5 // "." is not a legal octal digit
141._5 // "." is not a legal octal digit