स्ट्रिंग की लंबाई का पता लगाना

Go:
स्ट्रिंग की लंबाई का पता लगाना

कैसे:

Go में, स्ट्रिंग्स को अपरिवर्तनीय बाइट्स श्रृंखला के रूप में माना जाता है। आप एक स्ट्रिंग की लंबाई len() निर्मित-इन फ़ंक्शन का उपयोग करके पा सकते हैं जो बाइट्स की संख्या लौटाता है, जरूरी नहीं के अक्षरों की संख्या। इसका उपयोग कैसे करें:

package main

import (
	"fmt"
	"unicode/utf8"
)

func main() {
	// len() का उपयोग करके बाइट लंबाई ढूँढना
	str := "Hello, 世界"
	byteLength := len(str)
	fmt.Println("बाइट लंबाई:", byteLength) // आउटपुट: बाइट लंबाई: 13

	// स्ट्रिंग में अक्षरों या रून्स की संख्या सही ढंग से पाने के लिए
	runeLength := utf8.RuneCountInString(str)
	fmt.Println("रून लंबाई:", runeLength) // आउटपुट: रून लंबाई: 9
}

len() का उपयोग करने वाली पहली विधि हमेशा अपेक्षित परिणाम नहीं दे सकती है क्योंकि यह बाइट्स को गिनती है। गैर-ASCII अक्षरों (“世界” जैसे) वाली स्ट्रिंग्स के लिए unicode/utf8 पैकेज से RuneCountInString का उपयोग करना चाहिए जिससे Unicode कोड पॉइंट को सही तरीके से गिना जा सके।

गहराई में

Go 1 से पहले, बाइट्स के अनुक्रमों के विपरीत अक्षरों के अनुक्रमों को संभालने के लिए कोई सख्त विभाजन नहीं था। Go 1 के बाद, स्ट्रिंग्स के लिए मानक एन्कोडिंग योजना के रूप में UTF-8 की अपनाई जाने की आवश्यकता ने स्पष्ट दृष्टिकोणों की मांग की। ASCII स्ट्रिंग्स के लिए len() फ़ंक्शन बिल्कुल सही है, जहाँ अक्षर एक ही बाइट में प्रतिनिधित्व किए जाते हैं। हालाँकि, जैसे ही Go अनुप्रयोग अधिक वैश्विक बने, और भाषाओं और अक्षर सेटों की एक भरमार का समर्थन करने की जरूरत बढ़ी, len() का सरलीकृत दृष्टिकोण सीमित दिखाई दिया।

utf8.RuneCountInString() का परिचय और उपयोग इन सीमाओं का समाधान प्रदान करता है, जिससे वास्तविक Unicode अक्षरों (Go शब्दावली में रून्स) को गिनने का एक तरीका मिलता है। यह विधि यह सुनिश्चित करती है कि लंबाई की गणना UTF-8 के एन्कोडिंग विशिष्टताओं से स्वतंत्र हो, जहाँ अक्षर एकाधिक बाइट्स में फैले हो सकते हैं।

Go की समानांतरता और कुशलता की भावना के अनुरूप, स्ट्रिंग्स को रून्स की स्लाइस के रूप में मानना और प्रतिपादन करना, एक वैकल्पिक दृष्टिकोण हो सकता है। हालांकि, यह विधि एक रूपांतरण चरण की आवश्यकता होती है और यह तुरंत Unicode की सभी जटिलताओं को हल नहीं करती है (जैसे, संयोजक अक्षर)।

सारांश में, जबकि len() बाइट लंबाई के लिए उपयुक्त है और ASCII पाठ के लिए कुशल है, utf8.RuneCountInString() एक विश्वसनीय विकल्प है एक वैश्विक रूप से संगत अनुप्रयोग के लिए। फिर भी, विकासकर्ताओं को इन विकल्पों के साथ आने वाले प्रदर्शन और मेमोरी उपयोग में व्यापार-बंद को समझने के लिए प्रोत्साहित किया जाता है।