কীভাবে একই ভাষার বিভিন্ন প্যাকেজটি গো ভাষায় আমদানি করতে এবং ব্যবহার করতে হয়?


133

উদাহরণস্বরূপ, আমি একটি উত্স ফাইলে পাঠ / টেমপ্লেট এবং এইচটিএমএল / টেমপ্লেট উভয়ই ব্যবহার করতে চাই। তবে নীচের কোডটি ত্রুটি ছুঁড়ে ফেলবে।

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
এখানে কোনও সর্বোত্তম ভাষা নেই, কিছু সমস্যার জন্য কেবলমাত্র ভাষা আরও ভাল
ইনান্ক গুমাস

16

মোস্তফার উত্তর সঠিক, তবে এটি কিছু ব্যাখ্যা দাবি করে। এর উত্তর দেওয়ার চেষ্টা করি।

আপনার উদাহরণ কোডটি কাজ করে না কারণ আপনি একই নামের সাথে দুটি প্যাকেজ আমদানির চেষ্টা করছেন যা হ'ল: "টেম্পলেট"।

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

আমদানি একটি ঘোষণার বিবৃতি:

  • আপনি একই সুযোগে একই নাম ( পরিভাষা: শনাক্তকারী ) ঘোষণা করতে পারবেন না ।

  • Go এ, 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প্যাকেজ।

আপনি খেলার মাঠে এটি পরীক্ষা করতে পারেন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.