जब आप एक वेबसाइट बना रहे होते हैं, तो आप आमतौर पर अपनी कुछ अंतिम सामग्री को गतिशील रूप से उत्पन्न करते हैं। फिर आप उस डेटा को ब्राउज़र में प्रदर्शित करने के लिए अपने अंतिम वेब पेजों में इंजेक्ट करना चाहेंगे।
आप दो तरीकों में से एक ले सकते हैं: अपने पृष्ठ संरचना को अपने प्रोग्राम में एम्बेड करें, या अपने अंतिम डेटा को अलग टेम्पलेट फ़ाइलों के साथ संयोजित करें।
टेम्प्लेटिंग अधिक रखरखाव योग्य कोडबेस के लिए चिंताओं को अलग करता है। यह फ्रंट-एंड कार्यों और बैक-एंड कार्यों को विभाजित करना आसान बनाता है, उन्हें अलग-अलग टीम के सदस्यों को आवंटित करता है। गो के पास अपने मानक पुस्तकालय में उत्कृष्ट टेम्पलेटिंग समर्थन है।
Go. में टेंपलेटिंग के साथ शुरुआत करना
मानक पुस्तकालय में गो के दो टेम्पलेट पैकेज हैं: टेक्स्ट/टेम्पलेट तथा एचटीएमएल/टेम्पलेट. टेक्स्ट/टेम्पलेट पैकेज में टेक्स्ट फाइलों को पार्स करने की कार्यक्षमता है, जबकि एचटीएमएल/टेम्पलेट एचटीएमएल को संभालता है। HTML/टेम्पलेट का उपयोग करके आप क्रॉस-साइट स्क्रिप्टिंग (XSS) हमलों से सुरक्षित हैं क्योंकि गो रेंडरिंग के दौरान डेटा प्रविष्टि से बच जाता है। यह एक मैनुअल दृष्टिकोण पर टेम्पलेटिंग का एक और फायदा है।
चूंकि टेम्प्लेट पैकेज मानक पुस्तकालय का हिस्सा है, इसलिए आपको कोई निर्भरता स्थापित करने की आवश्यकता नहीं होगी; बस इसे आयात करें:
आयात "एचटीएमएल/टेम्पलेट"
से शुरू एक HTML फ़ाइल बनाना अपने आवेदन के लिए एक टेम्पलेट के रूप में उपयोग करने के लिए। आप मानक का उपयोग कर सकते हैं .html विस्तार या या तो .gohtml या .tmpl, दोनों हैं जो सामान्य भी हैं। आप जो भी एक्सटेंशन का उपयोग करते हैं, आपके एप्लिकेशन के भीतर कार्यक्षमता वही होगी। कुछ टेक्स्ट एडिटर आपके टेम्प्लेट के एक्सटेंशन के आधार पर अलग-अलग सिंटैक्स हाइलाइटिंग लागू कर सकते हैं। यहाँ एक बुनियादी कंकाल है:
<!DOCTYPE html>
<एचटीएमएल लैंग ="एन">
<सिर>
<मेटा वर्णसेट ="यूटीएफ-8">
<शीर्षक>दस्तावेज़</title>
</head>
<तन>
</body>
</html>
इस फाइल को अपने गो प्रोग्राम की डायरेक्टरी में सेव करें। अब आप इसके साथ अपने प्रोग्राम में टेम्पलेट के रूप में काम करना शुरू कर सकते हैं।
का एक वैश्विक उदाहरण बनाएं टेम्पलेट टेम्पलेट पैकेज की विधि। आप इस टेम्पलेट इंस्टेंस को अपने प्रोग्राम के विभिन्न हिस्सों से एक्सेस करेंगे।
वर tmplt * टेम्पलेट। टेम्पलेट
आपको अपने टेम्प्लेट प्रस्तुत करने और प्रदर्शित करने के लिए एक सरल सर्वर बनाना होगा। गो का उपयोग करके एक साधारण सर्वर शुरू करने का तरीका यहां दिया गया है नेट/http पैकेट:
समारोहरनसर्वर() {
एचटीटीपी। हैंडलफंक ("/ होम", हैंडलपेज)
त्रुटि: = http. सुनो और सर्व करें ("लोकलहोस्ट:8080", शून्य)
यदि गलती!= शून्य {
लकड़ी का लट्ठा। Fatalln ("सर्वर के साथ एक त्रुटि है:", इरेट)
}
}
आप कॉल करेंगे रनसर्वर सर्वर शुरू करने के लिए अपने मुख्य कार्य से कार्य करें। सर्वर का केवल एक ही मार्ग है, /home मार्ग, जो आपका पृष्ठ प्रदर्शित करेगा। हैंडलपेज पैरामीटर एक हैंडलर फ़ंक्शन का नाम है जो आपके पेज को रेंडर करेगा। सुनो और सेवा करो विधि सर्वर को पोर्ट पर सुनना शुरू करती है 8080 पर लोकलहोस्ट, यानी आपका अपना कंप्यूटर.
टेम्प्लेट में वैरिएबल पास करना
नाम से एक वैश्विक संरचना बनाएं समाचार:
प्रकार समाचार struct {
शीर्षक डोरी
शरीर डोरी
}
आप इस संरचना का उपयोग डेटा को संग्रहीत करने और अपने अंतिम पृष्ठ पर प्रदर्शित करने के लिए इसे अपने टेम्पलेट में पास करने के लिए करेंगे। अपने टेम्प्लेट में, आप डेटा को इंजेक्ट करने के लिए इस सिंटैक्स का उपयोग कर सकते हैं:
{{ नाम }}
कहाँ पे नाम एक वैरिएबल का नाम है जिसे आपने अपने टेम्प्लेट में पास किया है। जब आप टेम्प्लेट को रेंडर करते हैं, तो यह आपके गो कोड से संबंधित डेटा के साथ ब्रेसिज़ में मानों को बदल देगा। चूंकि निम्न उदाहरण एक संरचना को पारित करेगा, आप इसके क्षेत्रों तक पहुंचने के लिए डॉट नोटेशन का उपयोग करेंगे:
<तन>
<एच 1>{{ .शीर्षक }}</h1>
<पी> {{ ।शरीर }} </पी>
</body>
अपने टेम्प्लेट के कंकाल मार्कअप में खाली बॉडी एलिमेंट को ऊपर दिए गए कोड से बदलें।
हैंडलपेज हैंडलर फ़ंक्शन सत्यापित करेगा कि पृष्ठ के लिए अनुरोध एक GET अनुरोध है। यह तब टेम्पलेट को प्रस्तुत करने और अंतिम पृष्ठ की सेवा करने से पहले नमूना डेटा के साथ एक संरचना को पॉप्युलेट करता है:
समारोहहैंडलपेज(लेखक http. प्रतिक्रिया लेखक, अनुरोध *http. प्रार्थना) {
यदि अनुरोध। विधि == "प्राप्त करें" {
tmplt, _ = template. ParseFiles("tutorial.html")घटना:= समाचार{
शीर्षक: "makeuseof.com के पास टेक सब कुछ है",
मुख्य भाग: "MUO पर जाएँ के लिये प्रौद्योगिकी से संबंधित कुछ भी",
}त्रुटि: = tmplt. निष्पादित करें (लेखक, घटना)
यदि गलती!= शून्य {
वापसी
}
}
}
पार्सफ़ाइलें विधि आपके द्वारा निर्दिष्ट HTML फ़ाइल को पार्स करती है। प्रतिस्पर्धा चर प्रारंभिक संरचना है। निष्पादित टेम्पलेट में प्लेसहोल्डर्स के अनुसार, विधि आपूर्ति किए गए डेटा को अंतिम पृष्ठ में इंजेक्ट करेगी। निष्पादित एक लेता है प्रतिक्रिया लेखक और डेटा, इस मामले में, संरचना।
यहाँ सर्वर चलाने और पृष्ठ पर जाने का परिणाम है:
टेम्पलेट्स में नियंत्रण संरचनाओं का उपयोग करना
आप अपने टेम्प्लेट में कंडीशनल स्टेटमेंट्स और लूप्स जैसी नियंत्रण संरचनाओं का भी उपयोग कर सकते हैं।
एक लूप आपको कई मानों को आउटपुट करने और प्रत्येक के लिए समान संरचना का पुन: उपयोग करने की अनुमति देता है। उपयोग सीमा बार-बार होने वाली सामग्री की शुरुआत को परिभाषित करने के लिए कीवर्ड और समाप्त अंत के लिए कीवर्ड। लूप के भीतर आप उपयोग कर सकते हैं {{.}} सिंटैक्स वर्तमान मान को इंजेक्ट करने के लिए:
{{सीमा .}}
- {{.}}
{{समाप्त}}
फिर आप निष्पादन विधि के पैरामीटर के रूप में उस डेटा संरचना का नाम पास करेंगे जिसे आप लूप करना चाहते हैं:
MakeUseOfCategories := []डोरी{"प्रौद्योगिकी समझाया", "प्रोग्रामिंग", "लिनक्स",
"एंड्रॉइड", "आईओएस", "कई और..."}त्रुटि: = tmplt. निष्पादित करें (लेखक, makeUseOfCategories)
यदि गलती!= शून्य {
वापसी
}
MakeUseOfश्रेणियाँ वेरिएबल डेटा पैरामीटर के रूप में पारित करने के लिए तारों का एक टुकड़ा है। यहाँ स्लाइस के माध्यम से लूपिंग का परिणाम है:
बूलियन वैरिएबल के मान का परीक्षण करने के लिए आप अपने टेम्प्लेट में एक सशर्त विवरण का उपयोग कर सकते हैं। इस तरह बूलियन फ़ील्ड के साथ एक स्ट्रक्चर बनाएं:
प्रकार ट्रू फाल्सर struct {
सच हैं बूल
गलत है बूल
डिफ़ॉल्ट है बूल
}
एक सशर्त उपयोग करने के लिए, शामिल करें यदि परीक्षण करने के लिए चर के नाम से पहले डबल ब्रेसिज़ में कीवर्ड। सशर्त ब्लॉक को समाप्त करें समाप्त ब्रेसिज़ में कीवर्ड:
{{अगर .IsTrue}}
<पी>सही का मूल्यांकन करता है और आउटपुट करेगा</पी>
{{समाप्त}}{{अगर .IsDefault}}
<पी>असत्य का मूल्यांकन करता है और जीता'टी आउटपुट</पी>
{{समाप्त}}
{{अगर .IsFalse}}
<पी>असत्य का मूल्यांकन करता है और जीता'टी आउटपुट</पी>
{{समाप्त}}
गो में एक संरचना शुरू करना डिफ़ॉल्ट रूप से मानों को गलत पर सेट करता है, इसलिए यदि आप किसी फ़ील्ड को प्रारंभ नहीं करते हैं, तो यह गलत पर मूल्यांकन करता है। स्ट्रक्चर को इनिशियलाइज़ करने और वेरिएबल को डेटा के रूप में टेम्प्लेट में पास करने पर, केवल वे फ़ील्ड जो सही कारण आउटपुट का मूल्यांकन करते हैं।
पसंद: = ट्रूफाल्सर {
सच हैं: सच,
गलत है: असत्य,
}
त्रुटि: = tmplt. निष्पादित करें (लेखक, पसंद)
अंतिम आउटपुट में केवल एक पैराग्राफ शामिल है क्योंकि केवल isTrue फ़ील्ड सत्य का मूल्यांकन करता है:
आपको अपने बैकएंड एप्लिकेशन के लिए टेम्प्लेट का उपयोग करने की आवश्यकता नहीं है
आपके गो ऐप्स के लिए टेम्प्लेटिंग की आवश्यकता नहीं है। आप अन्य तरीकों का उपयोग कर सकते हैं जैसे कि अपने पेज संरचना को अपने प्रोग्राम में एम्बेड करना, इसके तर्क और अन्य व्यवहार के साथ।
हालाँकि, आप अपने लिए और अधिक काम करना समाप्त कर देंगे। गो टेम्प्लेटिंग XSS हमलों को रोकने में मदद करता है और पृष्ठ संरचना पर काम को बैकएंड लॉजिक से अलग करना आसान बनाता है।