गोलंग स्ट्रिंग से उंट

Nov 14 2020

मेरे प्रोजेक्ट में, ID को स्नोफ्लेकड के रूप में डिज़ाइन किया गया है। सामने का छोर मेरे लिए एक स्ट्रिंग से गुजरता है, और डेटाबेस स्टोरेज बिगिंट है। इसका मतलब है कि इससे पहले कि मैं इसे स्टोर करूं, इसे यूइंट में बदलना होगा। मुझे बताएं कि क्या करना है? डेमो डेटा:

m := "156343853366906880"

मेरा कोड:
u, _ := strconv.ParseUint(m, 0, 19)

अपेक्षित परिणाम सटीक हैं और सटीकता नहीं खोएंगे

जवाब

ShudiptaSharma Nov 14 2020 at 15:03

स्नोफ्लेकआईडी एक समय आधारित 64-बिट अद्वितीय आईडी है। चूंकि आपको स्ट्रिंग को 64-बिट संख्या में बदलने की आवश्यकता है, इसलिए strconv.ParseUint()यह काफी अच्छा है। देखें, ParseUint पर संदर्भ ।

आपके कोड में, आपने 19 को बिट आकार के रूप में उपयोग किया है। फ़्रंटेंड से स्ट्रिंग द्वारा दर्शाए गए पूर्णांक (अहस्ताक्षरित) में अंकों (नों) की संख्या के साथ इसे न मिलाएं।

64-बिट स्नोफ्लेकिड (स्ट्रिंग) को 64-बिट अहस्ताक्षरित पूर्णांक में परिवर्तित करने के लिए, 64 का उपयोग बिटसाइज़ arg के रूप में करें।

U, err := strvonv.ParseUint(s, 0, 64)
if err != nil {
    // handle error... 
}

इसके अलावा, त्रुटि को अनदेखा करने की कोशिश न करें, जब यह वास्तव में मायने रखता है।

1 Omkar76 Nov 14 2020 at 15:01

का तीसरा पैरामीटर strconv.parseUint()है bitSize। 19 बिट्स संख्या का प्रतिनिधित्व करने के लिए पर्याप्त नहीं हैं 156343853366906880। तो विधि एक त्रुटि देता है। (जिसे आप इसे बताकर अनदेखा कर रहे हैं _)

m := "156343853366906880"
_, err := strconv.ParseUint(m, 0, 19)
fmt.Println(err)
//strconv.ParseUint: parsing "156343853366906880": value out of range 524287

2 ^ 19 - 1 = 524287 सबसे बड़ी अहस्ताक्षरित संख्या है जिसे 19 बिट्स के साथ दर्शाया जा सकता है।

64 बिट के रूप में पास करें:

m := "156343853366906880"
u, err := strconv.ParseUint(m, 0, 64)
if err == nil {
    fmt.Print(u)
    //156343853366906880
}

यदि आपका नंबर uint64उपयोग से अधिक हो रहा है big.Int:

स्ट्रिंग इन टू बिग इन गो?