مرکزی مواد پر جائیں
ماڈیول 1 · سبق 2 از 5کورس میں 2/50~10 min
ماڈیول اسباق (2/5)

صفر قدر اور قسم کے تبادلے۔

Go میں واضح قدر کے بغیر اعلان کردہ ہر متغیر کو a موصول ہوتا ہے۔ صفر قدر: اپنی قسم کی "غیر جانبدار قدر"۔ یہ بہت بڑا فرق ہے۔ JavaScript سے، جہاں let x; پیدا کرتا ہے undefined، یا C، جہاں آپ ختم کرتے ہیں کوڑے دان کی یادداشت کے ساتھ۔ نہیں undefined، کوئی UB نہیں: صرف صفر۔

صفر ویلیو ٹیبل

زمرہقسمصفر قدر
عددیint, int64, float32, float64, uint, ...0
بولینboolfalse
سٹرنگstring"" (خالی سٹرنگ)
پوائنٹر*Tnil
سلائس / نقشہ / چینل[]T, map[K]V, chan Tnil
فنکشن / انٹرفیسfunc(...), interface{...}nil
ساختT struct{...}تمام فیلڈز ان کی صفر ویلیو پر
Go
var i int        // 0
var f float64    // 0
var s string     // ""
var b bool       // false
var p *int       // nil
var nums []int   // nil  (NB: una slice nil ha len 0 e si può iterare!)

تبدیلیاں ہمیشہ واضح ہوتی ہیں۔

C، Python یا JS کے برعکس، Go **خودکار طور پر ایک کو فروغ نہیں دیتا ہے۔ دوسرے کے لیے عددی قسم: آپ کو type(value) لکھنا چاہیے۔

Go
i := 42
var f float64 = float64(i)
var u uint = uint(i)

یہ "مطابقت پذیر" اقسام جیسے int اور int64 کے لئے بھی درست ہے: ایک واضح تبدیلی کی ہمیشہ ضرورت ہوتی ہے۔

Go
var a int = 10
var b int64 = int64(a)  // obbligatorio

ہندسوں کے درمیان تبدیلی: تراشے جانے پر دھیان دیں۔

float64 سے int تک جانا صفر کی طرف چھوٹا ہوتا ہے، ایسا نہیں ہوتا گول:

Go
f := 3.9
i := int(f)   // 3, non 4
n := int(-3.9) // -3, non -4

سٹرنگ ↔ نمبر کی تبدیلی

string(65) نہیں دیتا "65": یہ دیتا ہے "A" (کوڈ کے ساتھ رون نقطہ 65)۔ سٹرنگ → نمبر اور اس کے برعکس آپ کو strconv کی ضرورت ہے پیکیج:

Go
import "strconv"

s := strconv.Itoa(42)        // "42"
n, err := strconv.Atoi("42") // 42, nil

ہم Stdlib ماڈیول میں اس کا گہرائی میں احاطہ کریں گے۔

آپ کی باری

ورزش#go.m1.l2.e1
کوششیں: 0لوڈ ہو رہا ہے…

ٹائپ int کے متغیر کاؤنٹر کو شروع کیے بغیر ڈیکلیئر کریں اور اسے پرنٹ کریں۔ متوقع: 0۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

ابتداء کے بغیر متغیر قسم کی صفر قدر لیتا ہے۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#go.m1.l2.e2
کوششیں: 0لوڈ ہو رہا ہے…

عدد n=10 کو دیکھتے ہوئے، n کو float64 میں تبدیل کریں اور 4 سے تقسیم کریں۔ نتیجہ پرنٹ کریں (متوقع 2.5)۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

واضح تبدیلی کے بغیر، `n/4` ایک عددی تقسیم ہے جو 2 دیتا ہے۔

3 کوششوں کے بعد حل دستیاب ہے۔

Quiz#go.m1.l2.e3
تیار

یہ کوڈ کیا پرنٹ کرتا ہے؟

Go
f := 3.7
fmt.Println(int(f))
جواب کے اختیارات

Recap

  • ہر قسم کی ایک مستقل صفر قدر ہوتی ہے: کوئی undefined، کوئی UB نہیں۔
  • Slice/map/chan/func/interface/pointer کی قدر صفر ہے nil۔
  • عددی تبدیلیاں ہمیشہ type(value) کے ساتھ واضح ہوتی ہیں۔
  • int(float) صفر کی طرف چھوٹا ہوتا ہے؛ گول استعمال کرنے کے لیے math.Round۔
  • سٹرنگ ↔ نمبر کے لیے strconv پیکیج استعمال کریں (براہ راست کاسٹ نہیں)۔