मुख्य सामग्री पर जाएं
मॉड्यूल 1 · पाठ 2 का 5पाठ्यक्रम में 2/50~10 min
मॉड्यूल पाठ (2/5)

शून्य मान और प्रकार रूपांतरण

गो में स्पष्ट मान के बिना घोषित प्रत्येक वेरिएबल को एक प्राप्त होता है शून्य मान: अपने प्रकार का "तटस्थ मान"। यह बहुत बड़ा अंतर है जावास्क्रिप्ट से, जहां 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!)

रूपांतरण हमेशा स्पष्ट होते हैं

सी, पायथन या जेएस के विपरीत, गो स्वचालित रूप से को बढ़ावा नहीं देता है दूसरे को संख्यात्मक प्रकार: आपको type(value) लिखना होगा।

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

यह int और int64 जैसे "संगत" प्रकारों के लिए भी सत्य है: an स्पष्ट रूपांतरण हमेशा आवश्यक होता है.

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 को फ्लोट64 में बदलें और 4 से विभाजित करें। परिणाम प्रिंट करें (अपेक्षित 2.5)।

संपादक लोड हो रहा है...
संकेत दिखाएँ

स्पष्ट रूपांतरण के बिना, `n / 4` एक पूर्णांक विभाजन है जो 2 देता है।

3 प्रयासों के बाद समाधान उपलब्ध है

Quiz#go.m1.l2.e3
तैयार

यह कोड क्या प्रिंट करता है?

Go
f := 3.7
fmt.Println(int(f))
उत्तर विकल्प

संक्षिप्त

  • प्रत्येक प्रकार का एक सुसंगत शून्य मान होता है: कोई undefined नहीं, कोई UB नहीं।
  • स्लाइस/मैप/चान/फंक/इंटरफ़ेस/पॉइंटर का शून्य मान nil है।
  • type(value) के साथ संख्यात्मक रूपांतरण हमेशा स्पष्ट होते हैं।
  • int(float) शून्य की ओर छोटा हो जाता है; राउंड करने के लिए math.Round का उपयोग करें।
  • स्ट्रिंग ↔ नंबर के लिए strconv पैकेज का उपयोग करें (डायरेक्ट कास्ट नहीं)।