1.3 تایپ های پایه

1.3 تایپ های پایه

1.3.1 تایپ چیست؟ #

یک تایپ مشخص کننده نوع داده است، که به کامپایلر می‌گوید قرار است چه نوع داده ای داخل یک متغییر ذخیره گردد. زبان ها انواع تایپ های مختلفی به صورت پیشفرض دارند که می‌توان از آن‌ها داخل برنامه خود استفاده کرد. ما می‌توانیم تایپ ها را به دو دسته کلی تعریف کنیم.

1.3.1.1 تایپ ایستا (Static Type) #

زبانی مثل زبان گو یک زبان تایپ ایستا است، یعنی وقتی ما یک داده ای از نوع عددی داخل یک متغیر تعریف می‌کنیم داخل همان متغیر امکان اضافه کردن داده ای غیر داده عددی وجود ندارد.

1.3.1.2 تایپ پویا (Dynamic Type) #

زبان‌هایی مثل PHP، JavaScript و … جزو زبان‌های تایپ پویا هستند. یعنی وقتی یک متغیری از نوع عددی تعریف می‌کنیم می‌توانیم به همان متغیر مقادیر دیگه‌ای مثل مقادیر رشته‌ای اضافه کنیم.

برای اطلاعات بیشتر می‌توان تایپ سیستم را داخل ویکی‌پدیا مطالعه کنید.

1.3.2 تایپ‌ها در زبان گو #

زبان گو مثل سایر زبان‌ها یکسری تایپ‌های پایه دارد که در هر بخش از کد گو می‌توانید استفاده کنید. در ادامه ما این تایپ ها را با مقادیر پیش فرض‌شان معرفی می کنیم.

تایپمحدودهمقدار پیش فرض یا مقدار صفرحجم استفاده از حافظه
intبستگی به معماری سیستم عامل که ۳۲ بیت یا ۶۴ بیت باشد0۴ یا ۸ بایت
int8128- تا 1270۱ بایت
int1632768- تا 327670۲ بایت
int322147483648- تا 21474836470۴ بایت
int649223372036854775808- تا 92233720368547758070۸ بایت
uintبستگی به معماری سیستم عامل که ۳۲ بیت یا ۶۴ بیت باشد0۴ یا ۸ بایت
uint80 تا 2550۱ بایت
uint160 تا 655350۲ بایت
uint320 تا 62949672950۴ بایت
uint640 تا 184467440737095516150۸ بایت
uintptrعدد خیلی بزرگ0۸ بایت
float32IEEE-7540۴ بایت
float64IEEE-7540۸ بایت
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")
1package main
2
3func main() {
4	println(15 == 017) // true
5	println(15 == 0xF) // true
6}

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'a' // an English character
2'π'
3'众' // a Chinese character
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 می باشد.

1// The interpreted form.
2"Hello\nworld!\n\"你好世界\""
3
4// The raw form.
5`Hello
6world!
7"你好世界"`

همچنین رشته از کارکترهای خاص یونیکد مانند 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