1 گولانگ ڈیٹا ٹائپس کی تعارف
گولانگ میں، ڈیٹا ٹائپس پروگرامنگ کا بنیاد ہیں، جو متغیرات کوسٹور کرنے والے ڈیٹا کی شکل تعین کرتے ہیں۔ گولانگ کے دوائیں ڈیٹا ٹائپس درج ذیل قسموں میں تقسیم کیے جاتے ہیں:
ڈیٹا ٹائپ | تفصیل | میموری استعمال |
---|---|---|
bool | بولین ٹائپ، جو سچ یا جھوٹ کو محفوظ کرنے کے لیے استعمال ہوتا ہے | 1 بائٹ |
int، uint | سائنڈ اور یونسائنڈ معدود عدد، پلیٹفارم کے معیار پر معمولی سائز پر منحصر ہوتا ہے | 4 یا 8 بائٹ |
int8، uint8 | 8 بٹ سائنڈ اور یونسائنڈ معدود عدد | 1 بائٹ |
int16، uint16 | 16 بٹ سائنڈ اور یونسائنڈ معدود عدد | 2 بائٹ |
int32، uint32 | 32 بٹ سائنڈ اور یونسائنڈ معدود عدد | 4 بائٹ |
int64، uint64 | 64 بٹ سائنڈ اور یونسائنڈ معدود عدد | 8 بائٹ |
float32 | 32 بٹ فلاٹنگ پوائنٹ نمبر | 4 بائٹ |
float64 | 64 بٹ فلاٹنگ پوائنٹ نمبر | 8 بائٹ |
complex64 | 32 بٹ جوڑی دار عدد جس میں حقیقی اورخیالی حصوں کا استعمال ہوتا ہے | 8 بائٹ |
complex128 | 64 بٹ جوڑی دار عدد جس میں حقیقی اورخیالی حصوں کا استعمال ہوتا ہے | 16 بائٹ |
byte | uint8 کے مشابہ | 1 بائٹ |
rune | int32 کے مشابہ، جو یونیکوڈ کوڈ پوائنٹ کا مظاہرہ کرتا ہے | 4 بائٹ |
string | اسٹرنگ ٹائپ | سٹرنگ کی لمبائی پر منحصر ہے |
error | ایرر انٹرفیس، جو خرابی کی معلومات واپس کرنے کے لیے استعمال ہوتا ہے | کوئی مقررہ سائز نہیں |
یہ ٹائپس مختلف ضروریات کے مطابق منتخب کیے جا سکتے ہیں، مثلاً عددی حساب وغیرہ۔
2 عدد صحیح ڈیٹا ٹائپس
2.1 عدد صحیح ٹائپس کا جائزہ
گولانگ میں متعدد بنیادی عدد صحیح ٹائپس ہیں، جنے مندرجہ ذیل قسموں میں تقسیم کیا گیا ہے:
- سائنڈ انٹیجرز:
int8
،int16
،int32
(یاrune
)،int64
، اورint
- یونسائنڈ انٹیجرز:
uint8
(یاbyte
)،uint16
،uint32
،uint64
، اورuint
int
اور uint
کی سائزیں 32 بٹ سسٹمز پر 4 بائٹ ہوتی ہیں اور 64 بٹ سسٹمز پر 8 بائٹ ہوتی ہیں۔ انٹیجر ڈیٹا ٹائپس کی قیمت کی رینج مندرجہ ذیل جدول میں دکھائی گئی ہے:
قسم | قیمت کی رینج |
---|---|
int8 | -128 تا 127 |
uint8 | 0 تا 255 |
int16 | -32768 تا 32767 |
uint16 | 0 تا 65535 |
int32 | -2147483648 تا 2147483647 |
uint32 | 0 تا 4294967295 |
int64 | -9223372036854775808 تا 9223372036854775807 |
uint64 | 0 تا 18446744073709551615 |
2.2 عدد صحیح متغیرات کا استعمال
ایک عدد صحیح متغیر کو دعوت کرنے کا بنیادی سنٹیکس مندرجہ ذیل ہے:
var متغیر_نام ڈیٹا_ٹائپ = ابتدائی_قیمت
نمونہ کوڈ:
package main
import "fmt"
func main() {
var a int = 10 // سائنڈ انٹیجر متغیر
var b uint = 20 // یونسائنڈ انٹیجر متغیر
var c int8 = -128 // سب سے چھوٹی int8 قیمت
fmt.Println(a, b, c)
}
2.3 عدد صحیح عملیات
گولانگ عام حساب وغیرہ کے عام آپریٹرز کو سپورٹ کرتا ہے، جیسے جمع (+
)، منفی (-
)، ضرب (*
)، تقسیم (/
)، اور ماڈیو (%
)، ساتھ ہی بٹ وائیز آپریٹرز جیسے کہ بٹ وائیز اینڈ (&
)، آر (|
)، زیکسور (^
)، بائیٹ شفٹ بائی 1 (<<
)، اور بائیٹ شفٹ رائیٹ 1 (>>
) بھی ہیں۔
package main
import "fmt"
func main() {
x := 10
y := 3
// حساب عملیات
fmt.Println(x + y) // جمع
fmt.Println(x - y) // منفی
fmt.Println(x * y) // ضرب
fmt.Println(x / y) // تقسیم
fmt.Println(x % y) // ماڈیو
// بٹ وائیز عملیات
fmt.Println(x & y) // بٹ وائیز اینڈ
fmt.Println(x | y) // بٹ وائیز آر
fmt.Println(x ^ y) // بٹ وائیز زیکسور
fmt.Println(x << 1) // بائٹ شفٹ بائی 1
fmt.Println(x >> 1) // بائٹ شفٹ رائیٹ 1
}
3 فلاٹنگ پوائنٹ ڈیٹا ٹائپس
3.1 فلوٹنگ پوائنٹ ڈیٹا ٹائپ کا جائزہ
Go زبان میں، فلوٹنگ پوائنٹ ٹائپز میں float32
اور float64
شامل ہیں، جو 32 بیٹ اور 64 بیٹ فلوٹنگ پوائنٹ ڈیٹا کو ظاہر کرتے ہیں۔ عموماً، float64
کا استعمال کرنا مشورہ دیا جاتا ہے کیونکہ یہ زیادہ رینج اور زیادہ درست پریسیژن فراہم کرتا ہے۔
-
float32
کے قریب تقریباً 23 نمایاں بٹس ہیں، جو تقریباً 7 اعشاری ہندسوں کی درستی فراہم کرتے ہیں۔ -
float64
کے قریب تقریباً 52 نمایاں بٹس ہیں، جو تقریباً 16 اعشاری ہندسوں کی درستی فراہم کرتے ہیں۔
3.2 فلوٹنگ پوائنٹ متغیرات کا استعمال
فلوٹنگ پوائنٹ متغیرات کو بظاہر کسی حرفی نمائندے دینے یا var
کلیدی کا استعمال کرکے ظاہر کیا جا سکتا ہے:
package main
import "fmt"
func main() {
var f1 float32 = 3.14 // فلوٹ32 ٹائپ کی وضاحت کریں
f2 := 3.14 // خود بخود فلوٹ64 ٹائپ کیا جائے گا
fmt.Println(f1, f2)
}
3.3 فلوٹنگ پوائنٹ حساب اور مسائل
فلوٹنگ پوائنٹ حساب میں درستی کی ضیاع ہو سکتی ہے۔ بالخصوص دو بہت قریبی اعداد منفی کرنے کے وقت، عموماً اس مسئلے کا سامنا ہوتا ہے۔
package main
import "fmt"
func main() {
f1 := .1
f2 := .2
f3 := f1 + f2
fmt.Println(f3) // درستی کی مسئلے کی بنا پر، متوقع نتیجہ .3 نہیں ہو سکتا ہے۔
// فارمیٹ کردہ اوٹپٹ کو استعمال کرکے درستی کی مسائل کو ٹھیک کرنا
fmt.Printf("%.1f\n", f3) // اوٹپٹ کو .3 تصحیح کیا گیا
}
4 بولین ڈیٹا ٹائپ
4.1 بولین ڈیٹا ٹائپ کا جائزہ
بولین سب سے سادہ ڈیٹا ٹائپ ہے، اور اس کے صرف دو عددی قیمتیں ہوتی ہیں: ٹھیک
(سچ) اور جھوٹ
(غلط)۔ یہ شرائطی عبارتوں اور لوپ کنٹرول ساختوں میں اہم کردار ادا کرتا ہے۔
4.2 بولین متغیرات کا استعمال
بولین متغیرات کا اعلان اور استعمال:
package main
import "fmt"
func main() {
var success bool = true
var fail bool = false
fmt.Println("عمل کامیاب ہوا:", success)
fmt.Println("عمل ناکام ہوا:", fail)
}
بولین قیمتیں عموماً شرائطی عبارات میں استعمال ہوتی ہیں:
package main
import "fmt"
func main() {
a := 10
b := 20
fmt.Println("a == b:", a == b) // غلط
fmt.Println("a < b:", a < b) // ٹھیک
}
5 اسٹرنگ ڈیٹا ٹائپ
5.1 اسٹرنگ کا جائزہ
اسٹرنگ حروف کا ایک جمع ہے۔ Go زبان میں، اسٹرنگز غیر قابل تبدیل ہیں۔ ہر اسٹرنگ دو حصوں پر مشتمل ہوتا ہے: بنیادی بائٹ آرے کو اشارہ اور لمبائی۔ اسٹرنگز میں ہر قسم کا ڈیٹا ہو سکتا ہے، شامل ہے بائٹس۔
5.2 اسٹرنگ متغیرات کا استعمال
اسٹرنگ متغیرات عموماً دوہرے انوٹیشن "
کا استعمال کرکے تشکیل دیے جاتے ہیں، لیکن آپ ملٹی لائن اسٹرنگ کے لئے بھی بیکٹھکس ` کا استعمال کرسکتے ہیں:
package main
import "fmt"
func main() {
var s1 string = "ہیلو"
s2 := "دنیا"
s3 := `یہ ایک
ملٹی لائن
اسٹرنگ ہے`
fmt.Println(s1)
fmt.Println(s2)
fmt.Println(s3)
}
اسٹرنگ ایک بار بن گئی ہوتی ہے، اس کی مواد تبدیل نہیں کی جا سکتیں۔ زیریں عمل غیر قانونی ہے اور یہ کمپائل کی خرابی وجہ بنے گا:
s := "ہیلو"
s[] = 'H` // کمپائل کی خرابی: اسٹرنگ کی مواد قابل تغیر نہیں ہوتی
5.3 اسٹرنگ کے عمل
اسٹرنگز پروگرامنگ میں بہت عام اور اہم ہوتے ہیں۔ Go زبان میں ہمیں اسٹرنگ کے عمل کے لئے مکمل فراہم کردہ فنکشنز موجود ہیں۔ یہاں کچھ عام عملیات دی گئی ہیں۔
5.3.1 اسٹرنگ جوڑنا
Go زبان میں، آپ اسٹرنگز کو جوڑنے کے لئے پلاس عملی کا استعمال کرسکتے ہیں (+
)، جو سب سے سیدھی میتھوڈ ہے۔ اس کے علاوہ، اگر آپ کئی اسٹرنگز کو بار بار جوڑتے ہیں تو بہتر کارکردگی کے لئے strings.Builder
کا استعمال کرنا مشورہ دیا جاتا ہے۔
package main
import (
"fmt"
"strings"
)
func main() {
// پلاس عملی کا استعمال کرتے ہوئے اسٹرنگز جوڑنا
hello := "ہیلو، "
world := "دنیا!"
result := hello + world
fmt.Println(result) // اوٹپٹ: ہیلو، دنیا!
// strings.Builder استعمال کرتے ہوئے اسٹرنگز جوڑنا
var sb strings.Builder
sb.WriteString("ہیلو، ")
sb.WriteString("دنیا!")
fmt.Println(sb.String()) // اوٹپٹ: ہیلو، دنیا!
}
5.3.2 سٹرنگ کی تقسیم
سٹرنگ کی تقسیم کو مخصوص ڈیلیمٹر کے مطابقت پر سلائس میں تقسیم کرنے والے strings.Split
فنکشن کا استعمال کر کے کیا جا سکتا ہے۔
package main
import (
"fmt"
"strings"
)
func main() {
// ایک سٹرنگ کی تعریف کریں
sentence := "Go is an open source programming language"
// سٹرنگ کو خالی جگہ سے تقسیم کریں
words := strings.Split(sentence, " ")
for _, word := range words {
fmt.Printf("%s\n", word)
}
// ایشو:
// Go
// is
// an
// open
// source
// programming
// language
}
5.3.3 انڈیکس رسائی
Go میں، ایک سٹرنگ غیر قابل تبدیل بائٹوں کا تسلسل ہوتا ہے۔ آپ ایک مخصوص بائٹ کو رسائی حاصل کرنے کے لیے انڈیکسنگ کا استعمال کر سکتے ہیں۔ البتہ، اس بات کا خیال رکھنا اہم ہے کہ کسی بھی سٹرنگ میں مالٹی بائٹ کریکٹر (مثلاً یو ٹی ایف-8 اینکوڈڈ کریکٹر) موجود ہو سکتے ہیں، لہذا براہ کرم یاد رکھیں کہ سیدھی انڈیکسنگ متوقع سنگل کریکٹر نہیں دے سکتی۔
package main
import "fmt"
func main() {
s := "Hello, 世界"
for i := ; i < len(s); i++ {
fmt.Printf("%d: %x\n", i, s[i])
}
// نوٹ: یہ باہر نکلے گا بائٹوں کے شمسی ترتیب کی ہیکساڈیسمل نمائندگی دے گا، کریکٹر نہیں
}
سٹرنگ کو کریکٹر کے ذریعے چلانے کے لیے آپ range
لوپ کا استعمال کر سکتے ہیں۔
package main
import "fmt"
func main() {
s := "Hello, 世界"
for index, runeValue := range s {
fmt.Printf("%d: %U '%c'\n", index, runeValue, runeValue)
}
// اوٹپٹ: ہر کریکٹر کے لیے انڈیکس، یونیکوڈ انکوڈنگ، اور خود کریکٹر
}
5.3.4 لمبائی حاصل کرنا
len
فنکشن سٹرنگ کی لمبائی حاصل کر سکتا ہے، یعنی زیریں بائٹ سیریکوئنس کی لمبائی۔ یو ٹی ایف-8 سٹرنگ کیلئے، اگر آپ کو کریکٹرز (رون) کی تعداد حاصل کرنی ہو، تو آپ utf8.RuneCountInString
فنکشن کا استعمال کریں۔ یہ مالٹی بائٹ کریکٹرز کو صحیح طریقے سے ہینڈل کر سکتا ہے۔
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
s := "Hello, 世界"
fmt.Println("بائٹس لمبائی:", len(s)) // بائٹ لمبائی کو اوٹپٹ کریں
fmt.Println("رون لمبائی:", utf8.RuneCountInString(s)) // کریکٹر لمبائی کو اوٹپٹ کریں
}
فوق کے مثال سے ہم دیکھ سکتے ہیں کہ Go زبان سٹرنگ عملیات کیلئے امیر لائبریری فنکشنز فراہم کرتا ہے، جس سے مختلف سٹرنگ پروسیسنگ کے کئے کام آسان ہوتا ہے۔ کوڈنگ کے دوران، زیریں بائٹس اور کریکٹرز کے درمیان فرق پر خصوصی توجہ دینا اہم ہے، خاص کر غیر ایسکی کریکٹر سیٹس کو دیکھتے ہوئے۔