गो भाषा में एक ही नाम के विभिन्न पैकेजों का आयात और उपयोग कैसे करें?


133

उदाहरण के लिए, मैं एक स्रोत फ़ाइल में पाठ / टेम्पलेट और HTML / टेम्पलेट दोनों का उपयोग करना चाहता हूं। लेकिन नीचे दिए गए कोड त्रुटियों को फेंक देते हैं।

import (
    "fmt"
    "net/http"
    "text/template" // template redeclared as imported package name
    "html/template" // template redeclared as imported package name
)

func handler_html(w http.ResponseWriter, r *http.Request) {
    t_html, err := html.template.New("foo").Parse(`{{define "T"}}Hello, {{.}}!{{end}}`)
    t_text, err := text.template.New("foo").Parse(`{{define "T"}}Hello, {{.}}!{{end}}`)

}

जवाबों:


259
import (
    "text/template"
    htemplate "html/template" // this is now imported as htemplate
)

कल्पना में इसके बारे में और पढ़ें ।


4
जेएस ने इसे requireऔर importबयानों की स्पष्टता के साथ पकड़ लिया , बस मैंने देखी गई किसी भी अन्य भाषाओं की तुलना में बहुत बेहतर है
एंडी

@ r3wt: सर्वश्रेष्ठ। भाषा: हिन्दी। कभी!
मैट जॉइनर

1
कोई सबसे अच्छी भाषा नहीं है, केवल कुछ समस्याओं के लिए बेहतर भाषाएं आदि
Inanc Gumus

16

मुस्तफा द्वारा उत्तर सही है, हालांकि यह कुछ स्पष्टीकरण की मांग करता है। इसका जवाब देने की कोशिश करता हूं।

आपका उदाहरण कोड काम नहीं करता है क्योंकि आप एक ही नाम के साथ दो पैकेज आयात करने की कोशिश कर रहे हैं, जो है: "टेम्पलेट"।

import "html/template"  // imports the package as `template`
import "text/template"  // imports the package as `template` (again)

आयात एक घोषणा विवरण है:

  • आप समान दायरे में समान नाम ( शब्दावली: पहचानकर्ता ) की घोषणा नहीं कर सकते ।

  • गो में, importएक घोषणा है और इसका दायरा वह फाइल है जो उन पैकेजों को आयात करने की कोशिश कर रहा है।

  • यह उसी कारण से काम नहीं करता है कि आप एक ही ब्लॉक में एक ही नाम के साथ चर घोषित नहीं कर सकते।

निम्नलिखित कोड काम करता है:

package main

import (
    t "text/template"
    h "html/template"
)

func main() {
    t.New("foo").Parse(`{{define "T"}}Hello, {{.}}!{{end}}`)
    h.New("foo").Parse(`{{define "T"}}Hello, {{.}}!{{end}}`)
}

ऊपर दिया गया कोड एक ही नाम के साथ आयातित पैकेज को दो अलग-अलग नाम देता है। : तो, वहाँ अब दो अलग अलग पहचानकर्ता है कि आप उपयोग कर सकते हैं tके लिए text/templateपैकेज, और hके लिए html/templateपैकेज।

आप इसे खेल के मैदान पर देख सकते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.