मॉड्यूल पाठ (2/5)
शून्य मान और प्रकार रूपांतरण
गो में स्पष्ट मान के बिना घोषित प्रत्येक वेरिएबल को एक प्राप्त होता है
शून्य मान: अपने प्रकार का "तटस्थ मान"। यह बहुत बड़ा अंतर है
जावास्क्रिप्ट से, जहां let x; undefined उत्पन्न करता है, या C, जहां आप समाप्त करते हैं
कचरा स्मृति के साथ ऊपर. नहीं undefined, कोई UB नहीं: बस शून्य।
शून्य मान तालिका
| श्रेणी | प्रकार | शून्य मान |
|---|---|---|
| संख्यात्मक | int, int64, float32, float64, uint, ... | 0 |
| बूलियन | bool | false |
| स्ट्रिंग | string | "" (खाली स्ट्रिंग) |
| सूचक | *T | nil |
| स्लाइस/मानचित्र/चैनल | []T, map[K]V, chan T | nil |
| फ़ंक्शन/इंटरफ़ेस | func(...), interface{...} | nil |
| संरचना | T struct{...} | सभी फ़ील्ड अपने शून्य मान पर |
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) लिखना होगा।
i := 42
var f float64 = float64(i)
var u uint = uint(i)यह int और int64 जैसे "संगत" प्रकारों के लिए भी सत्य है: an
स्पष्ट रूपांतरण हमेशा आवश्यक होता है.
var a int = 10
var b int64 = int64(a) // obbligatorioसंख्याओं के बीच रूपांतरण: काट-छाँट से सावधान रहें
float64 से int तक जाना शून्य की ओर छोटा हो जाता है, ऐसा नहीं है
गोल:
f := 3.9
i := int(f) // 3, non 4
n := int(-3.9) // -3, non -4स्ट्रिंग ↔ संख्या रूपांतरण
string(65) "65" नहीं देता: यह "A" (कोड वाला रूण) देता है
बिंदु 65). स्ट्रिंग → संख्या और इसके विपरीत के लिए आपको strconv की आवश्यकता है
पैकेज:
import "strconv"
s := strconv.Itoa(42) // "42"
n, err := strconv.Atoi("42") // 42, nilहम इसे Stdlib मॉड्यूल में गहराई से कवर करेंगे।
आपकी बारी
int प्रकार के एक वेरिएबल काउंटर को बिना इनिशियलाइज़ किए घोषित करें और प्रिंट करें। अपेक्षित: 0.
संकेत दिखाएँ
इनिशियलाइज़र के बिना वेरिएबल प्रकार का शून्य मान लेता है।
3 प्रयासों के बाद समाधान उपलब्ध है
पूर्णांक n=10 को देखते हुए, n को फ्लोट64 में बदलें और 4 से विभाजित करें। परिणाम प्रिंट करें (अपेक्षित 2.5)।
संकेत दिखाएँ
स्पष्ट रूपांतरण के बिना, `n / 4` एक पूर्णांक विभाजन है जो 2 देता है।
3 प्रयासों के बाद समाधान उपलब्ध है
यह कोड क्या प्रिंट करता है?
f := 3.7
fmt.Println(int(f))संक्षिप्त
- प्रत्येक प्रकार का एक सुसंगत शून्य मान होता है: कोई
undefinedनहीं, कोई UB नहीं। - स्लाइस/मैप/चान/फंक/इंटरफ़ेस/पॉइंटर का शून्य मान
nilहै। type(value)के साथ संख्यात्मक रूपांतरण हमेशा स्पष्ट होते हैं।int(float)शून्य की ओर छोटा हो जाता है; राउंड करने के लिएmath.Roundका उपयोग करें।- स्ट्रिंग ↔ नंबर के लिए
strconvपैकेज का उपयोग करें (डायरेक्ट कास्ट नहीं)।