📐 Go टेम्पलेट्स में व्हाइटस्पेस को नियंत्रित करना: नेस्टेड लूप्स 🔗

Go के text/template पैकेज के साथ काम करते समय, नेस्टेड डेटा संरचनाओं को फ़ॉर्मेट करने पर अक्सर अवांछित खाली लाइनें आ जाती हैं। चूंकि Go टेम्पलेट्स सभी व्हाइटस्पेस को सुरक्षित रखते हैं—जिसमें स्वयं टेम्पलेट कोड को फ़ॉर्मेट करने के लिए उपयोग की जाने वाली नई लाइनें (newlines) भी शामिल हैं—इसलिए सामान्य लूप्स अनावश्यक खाली जगहों वाला आउटपुट उत्पन्न करते हैं।

यहाँ बताया गया है कि Go के टेम्पलेट ट्रिम मार्कर्स का उपयोग करके व्हाइटस्पेस की समस्या को कैसे हल किया जाए।

📑 विषय-सूची 🔗


⚠️ समस्या: सुरक्षित रखी गई नई लाइनें (Newlines) 🔗

मान लीजिए कि हम इस नेस्टेड डेटा संरचना को फ़ॉर्मेट करना चाहते हैं:

var data = map[string]map[string][]string{
	"1": {
		"1.1": {"1.1.1", "1.1.2", "1.1.3"},
	},
	"2": {
		"2.1": {"2.1.1", "2.1.2", "2.1.3"},
	},
}

टेम्पलेट लिखने का एक स्वाभाविक तरीका मानक {{ range }} ब्लॉकों का उपयोग करना है:

{{ range $name, $map := . }}
{{ $name }}:
  {{ range $name, $values := $map }}
  {{ $name }}:
    {{ range $value := $values }}
    {{ $value }}
    {{ end }}
  {{ end }}
{{ end }}

चूंकि टेम्पलेट में प्रत्येक नई लाइन और इंडेंटेशन स्पेस को ठीक वैसे ही प्रिंट किया जाता है जैसे वह लिखा गया है, इसलिए आउटपुट खाली जगहों से भर जाता है:

1:
  
  1.1:
    
    1.1.1
    
    1.1.2
    
    1.1.3
    
  

2:
...

✂️ समाधान: ट्रिम मार्कर (-) 🔗

आप एक्शन टैग्स के अंदर एक माइनस चिह्न (-) जोड़कर Go टेम्पलेट इंजन को आस-पास के व्हाइटस्पेस को हटाने का निर्देश दे सकते हैं:

हमारे नेस्टेड लूप को ठीक करने के लिए, हम अपने इच्छित इंडेंटेशन को हटाए बिना टेम्पलेट की फ़ॉर्मेटिंग वाली नई लाइनों को हटाने के लिए रणनीतिक रूप से - मार्कर लगाते हैं:

{{- range $name, $map := . -}}
{{ $name }}:
  {{- range $name, $values := $map }}
  {{ $name }}:
    {{- range $value := $values }}
    {{ $value }}
    {{- end }}
  {{- end }}
{{ end -}}

range घोषणाओं और end ब्लॉकों के तुरंत बाद आने वाली नई लाइनों को हटाकर, हमें साफ और सटीक आउटपुट मिलता है:

1:
  1.1:
    1.1.1
    1.1.2
    1.1.3
2:
  2.1:
    2.1.1
    2.1.2
    2.1.3

💻 पूरा चलने योग्य उदाहरण (Runnable Example) 🔗

आप इस व्यवहार का सीधे परीक्षण करने के लिए इस कोड को कॉपी करके चला सकते हैं।

package main

import (
	"fmt"
	"os"
	"text/template"
)

var data = map[string]map[string][]string{
	"1": {
		"1.1": {"1.1.1", "1.1.2", "1.1.3"},
	},
	"2": {
		"2.1": {"2.1.1", "2.1.2", "2.1.3"},
	},
}

func main() {
	const tpl = `
{{- range $name, $map := . -}}
{{ $name }}:
  {{- range $name, $values := $map }}
  {{ $name }}:
    {{- range $value := $values }}
    {{ $value }}
    {{- end }}
  {{- end }}
{{ end -}}
`
	fmt.Println("Output:")
	fmt.Println("'''")
	
	t := template.Must(template.New("nested").Parse(tpl))
	t.Execute(os.Stdout, data)
	
	fmt.Println("'''")
}

📚 मेरी निःशुल्क ई-बुक डाउनलोड करें 🔗

काउए की जीवनशैली का क्यूरेटेड ऑफ़लाइन संस्करण प्राप्त करें—🍏 स्वास्थ्य, 💰 धन, ❤️ प्रेम और 🧘 अर्थ को बेहतर बनाने के लिए एक व्यावहारिक मार्गदर्शिका।

काउए की जीवनशैली

काउए की जीवनशैली

📬 न्यूज़लेटर की सदस्यता लें 🔗

जब भी मैं बेहतर जीवन जीने पर नए निबंध, पुस्तक सारांश और व्यावहारिक गाइड प्रकाशित करूँ, तो सूचना प्राप्त करें। कोई स्पैम नहीं—कभी भी सदस्यता समाप्त करें।


💬 टिप्पणियाँ और चर्चा 🔗

क्या आपका कोई प्रश्न, दृष्टिकोण या सुझाव है? नीचे अपने विचार साझा करें। टिप्पणियाँ GitHub Discussions (विज्ञापन-मुक्त और स्पैम-मुक्त) द्वारा संचालित हैं—टिप्पणी करने या प्रतिक्रिया देने के लिए नीचे Sign in with GitHub पर क्लिक करें (निःशुल्क GitHub खाता बनाने में एक मिनट से भी कम समय लगता है)।



अंतिम अपडेट: 11 अक्टू॰ 2026.

अस्वीकरण (DISCLAIMER): इस साइट की सामग्री केवल सूचनात्मक और शैक्षिक उद्देश्यों के लिए है और यह चिकित्सा, मनोवैज्ञानिक, वित्तीय, निवेश, कर या कानूनी सलाह का गठन नहीं करती है। यहाँ प्रस्तुत विचार, संकलन और राय पूरी तरह से मेरे अपने हैं और मेरे नियोक्ता का प्रतिनिधित्व नहीं करते हैं। पुस्तकों, व्याख्यानों और लेखों के सारांश स्वतंत्र शैक्षिक टिप्पणियाँ हैं और उनके संबंधित लेखकों की बौद्धिक संपदा बने रहते हैं। संपादन, स्वरूपण और संश्लेषण में सहायता के लिए AI उपकरणों का उपयोग किया जा सकता है; यद्यपि सटीकता सुनिश्चित करने का हर संभव प्रयास किया जाता है, फिर भी त्रुटियाँ हो सकती हैं। गोपनीयता (PRIVACY): यह साइट वैकल्पिक न्यूज़लेटर सदस्यता (follow.it), टिप्पणियों (giscus / GitHub Discussions) और एम्बेडेड मीडिया (YouTube) के लिए तृतीय-पक्ष सेवाओं का उपयोग करती है, जो अपनी संबंधित गोपनीयता नीतियों के अनुसार आगंतुकों के IP पते और कुकीज़ को संसाधित कर सकती हैं।