تبدیل انواع داده

توصیه می کنیم قبل از شروع این درس ابتدا دو مطلب زیر را بخوانید :

تبدیل نوع یا Type casting، روشی برای تبدیل نوع یک متغیر به نوع دیگر است. نحوه Type casting در Go به صورت زیر است:

type_name(expression)

type_name نوع جدید و expression نام متغیری است که قرار است به نوع دیگر تبدیل شود. به کد زیر توجه کنید:

  1: package main
  2: 
  3: import "fmt"
  4: 
  5: func main() {
  6:   var number1 byte = 5
  7:   var number2 int  = int(number1)
  8: 
  9:   fmt.Println(number2)
 10: }
5

در خط 7 کد بالا بعد از نوع جدید، نام متغیر موجود در خط 6 را ذکر کرده ایم. این بدین معناست که متغیر number1 را به نوع int تبدیل کن و در داخل متغیر number2 قرار بده. در مثال نوع داده‌ای byte می‌تواند مقادیر 0 تا 255 را در خود ذخیره کند و نوع داده‌ای int مقادیر 2147483648- تا 2147483647 را شامل می‌شود. پس می‌توانید بدون هیچ مشکلی یک متغیر از نوع byte را به یک نوع int تبدیل کنید. مقدار 5 متغیر number1 در محدوده مقادیر byte یعنی اعداد بین 255-0 قرار دارد اما متغیری از نوع بایت حافظه کمتری نسبت به متغیری از نوع صحیح اشغال می‌کند. نوع byte شامل 8 بیت یا 8 رقم دودویی است در حالی که نوع int شامل 32 بیت یا رقم باینری است. یک عدد باینری عددی متشکل از 0 و 1 است. برای مثال عدد 5 در کامپیوتر به عدد باینری 101 ترجمه می‌شود. بنابراین وقتی ما عدد 5 را در یک متغیر از نوع بایت ذخیره می‌کنیم عددی به صورت زیر نمایش داده می‌شود :

00000101

و وقتی آن را در یک متغیر از نوع صحیح ذخیره می‌کنیم به صورت زیر نمایش داده می‌شود :

00000000000000000000000000000101

بنابراین قرار دادن یک مقدار int، در یک متغیر byte، درست مانند این است که ما سعی کنیم که یک توپ فوتبال را در یک سوراخ کوچک گلف جای دهیم. حال به مثال زیر توجه کنید :

  1: package main
  2: 
  3: import "fmt"
  4: 
  5: func main() {
  6:   var num1 int = 300
  7:   var num2 byte  = byte(num1)
  8: 
  9:   fmt.Println(num2)
 10: }
44

در کد بالا یک num1 یک نوع صحیح با مقدار 300 است که آن را در خط 7 به نوع byte تبدیل کرده و در متغیر num2 قرار داده ایم. پس چرا خروجی 44 است؟ دلیل آن این است که نوع byte اعداد بین 255-0 را در خود ذخیره می کند و عدد 300 جز این محدود نیست. اما چرا عدد 44؟ این کار به تعداد بیتها بستگی دارد. یک byte دارای 8 بیت است درحالی که int دارای 32 بیت است. حال اگر به مقدار باینری 2 عدد توجه کنید متوجه می‌شوید که چرا خروجی عدد 44 است.

300 = 00000000000000000000000100101100 
255 =                         11111111
-------------------------------------- 
 44 =                         00101100

خروجی بالا نشان می‌دهد که بیشترین مقدار byte که عدد 255 است می‌تواند فقط شامل 8 بیت باشد (11111111) بنابراین فقط 8 بیت اول مقدار int به متغیر byte انتقال می‌یابد که شامل (00101100) یا عدد 44 در مبنای 10 است.