बिना प्रिंट किए Go में स्ट्रिंग फ़ॉर्मेटिंग: एक संपूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: यदि प्रिंट करने की आवश्यकता नहीं है तो स्ट्रिंग को क्यों फ़ॉर्मेट करें?

\n\n

क्या आपने कभी ऐसी स्थिति का सामना किया है जहाँ आपको कई भागों से एक स्ट्रिंग को खूबसूरती से जोड़ना हो, वेरिएबल डालने हों, इंडेंटेशन जोड़ना हो, लेकिन परिणाम स्क्रीन पर प्रिंट नहीं करना हो? ऐसा लगता है कि Go ट्यूटोरियल्स के सभी उदाहरण fmt.Println कॉल के साथ समाप्त होते हैं, लेकिन क्या होगा यदि स्ट्रिंग को नेटवर्क पर भेजने, फ़ाइल में लिखने या किसी अन्य फ़ंक्शन में पास करने के लिए आवश्यक हो?

\n\n

यह प्रश्न हजारों डेवलपर्स को परेशान करता है, और यह व्यर्थ नहीं है — Stack Overflow पर इसके दसियों हज़ार व्यूज़ हैं। इस लेख में हम बिना प्रिंट किए Go में स्ट्रिंग्स को कैसे फ़ॉर्मेट करें, वास्तविक कोड उदाहरणों का उपयोग करके समझेंगे। आप शक्तिशाली टूल fmt.Sprintf, strings.Builder के साथ आधुनिक दृष्टिकोण और निम्न-स्तरीय bytes.Buffer के बारे में जानेंगे। चलिए शुरू करते हैं!

\n\n

समस्या: Printf प्रिंट करता है, लेकिन मुझे सहेजना है

\n\n

Go में एक शानदार फ़ंक्शन fmt.Printf है जो स्ट्रिंग को फ़ॉर्मेट करता है और तुरंत इसे मानक आउटपुट स्ट्रीम में प्रिंट करता है। लेकिन क्या होगा यदि आप फ़ॉर्मेटेड स्ट्रिंग को एक मान के रूप में प्राप्त करना चाहते हैं, न कि साइड इफ़ेक्ट के रूप में? उदाहरण के लिए:

\n\n
name := "आलिसा"\nage := 30\n// मैं स्ट्रिंग "मेरा नाम आलिसा है, मैं 30 साल की हूँ" प्राप्त करना चाहता हूँ\n// लेकिन इसे तुरंत प्रिंट नहीं करना चाहता\n
\n\n

शुरुआती डेवलपर्स अक्सर ऐसा लिखते हैं:

\n\n
fmt.Printf("मेरा नाम %s है, मैं %d साल का हूँ", name, age)\n// स्ट्रिंग प्रिंट हो गई, लेकिन हमने इसे खो दिया!\n
\n\n

यह काम करता है, लेकिन परिणाम कंसोल में चला जाता है। जबकि हमें आगे की प्रक्रिया के लिए इसे एक वेरिएबल में सहेजना होगा। इसका एक समाधान है, और यह सुरुचिपूर्ण है।

\n\n

समाधान #1: fmt.Sprintf — फ़ॉर्मेटिंग का राजा

\n\n

fmt पैकेज में Printf का एक जुड़वां फ़ंक्शन है जिसे Sprintf कहा जाता है। शुरुआत में "S" अक्षर का अर्थ "String" है — यह स्ट्रिंग लौटाता है, इसे प्रिंट नहीं करता। यह बिना प्रिंट किए Go में स्ट्रिंग फ़ॉर्मेटिंग का सबसे सीधा और समझने योग्य तरीका है।

\n\n

Sprintf के साथ बुनियादी उदाहरण

\n\n
package main\n\nimport (\n    "fmt"\n)\n\nfunc main() {\n    name := "बॉब"\n    age := 25\n    score := 98.5\n\n    // बिना प्रिंट किए फ़ॉर्मेट करें\n    message := fmt.Sprintf("नमस्ते, %s! तुम %d साल के हो। तुम्हारा स्कोर: %.1f अंक।", name, age, score)\n\n    // अब message में फ़ॉर्मेटेड स्ट्रिंग है\n    fmt.Println(message) // अभी प्रिंट करें\n}\n
\n\n

आउटपुट:

\n
नमस्ते, बॉब! तुम 25 साल के हो। तुम्हारा स्कोर: 98.5 अंक।
\n\n

ध्यान दें: Sprintf वही प्लेसहोल्डर ( %s, %d, %f ) का उपयोग करता है जो Printf करता है। अंतर केवल इतना है कि परिणाम लौटाया जाता है, प्रिंट नहीं किया जाता।

\n\n

उन्नत प्लेसहोल्डर

\n\n

आप Go की सभी फ़ॉर्मेटिंग क्षमताओं का उपयोग कर सकते हैं:

\n\n
package main\n\nimport "fmt"\n\nfunc main() {\n    // चौड़ाई के अनुसार संरेखण\n    leftAligned := fmt.Sprintf("%-10s %d", "उत्पाद", 10)\n    rightAligned := fmt.Sprintf("%10s %d", "उत्पाद", 10)\n\n    // संख्याओं का फ़ॉर्मेटिंग\n    price := 1234.5678\n    formattedPrice := fmt.Sprintf("मूल्य: $%.2f (वैट सहित: $%.2f)", price, price*1.2)\n\n    // हेक्साडेसिमल आउटपुट\n    hexValue := fmt.Sprintf("Hex: %x, Dec: %d", 255, 255)\n\n    fmt.Println(leftAligned)\n    fmt.Println(rightAligned)\n    fmt.Println(formattedPrice)\n    fmt.Println(hexValue)\n}\n
\n\n

आउटपुट:

\n
उत्पाद      10\n      उत्पाद 10\nमूल्य: $1234.57 (वैट सहित: $1481.48)\nHex: ff, Dec: 255
\n\n

fmt.Sprintf — यह Go स्ट्रिंग फ़ॉर्मेटिंग के लिए आपका सार्वभौमिक उपकरण है। यह तेज़ी से काम करता है, समझने योग्य है और 90% कार्यों को कवर करता है।

\n\n

समाधान #2: strings.Builder — जटिल निर्माणों के लिए

\n\n

क्या होगा यदि आपको कई भागों से एक स्ट्रिंग बनानी है, उन्हें एक-एक करके जोड़ना है? उदाहरण के लिए, HTML, JSON या SQL क्वेरी बनाना। प्रत्येक भाग के लिए Sprintf का उपयोग करना अकुशल है — आप बहुत सारी मेमोरी आवंटित करेंगे और स्ट्रिंग्स को बार-बार कॉपी करेंगे। यहीं पर strings.Builder बचाव के लिए आता है — यह एक बफर है जो स्ट्रिंग को कुशलतापूर्वक बनाने के लिए डिज़ाइन किया गया है।

ब्लॉग

पुस्तक अनुशंसाएँ