টেমপ্লেটে মানচিত্রের মাধ্যমে আইট্রেট করা


94

আমি একটি তালিকা জিম ক্লাস (যোগ, পাইলেটস ইত্যাদি) প্রদর্শনের চেষ্টা করছি। প্রতিটি শ্রেণির ধরণের জন্য বিভিন্ন ক্লাস রয়েছে, তাই আমি সমস্ত যোগ ক্লাস এবং সমস্ত পাইলেট ক্লাস এবং আরও অনেকগুলি গ্রুপ করতে চাই।

আমি এই ফাংশনটি একটি স্লাইস নিতে এবং এটির একটি মানচিত্র তৈরি করতে তৈরি করেছি

func groupClasses(classes []entities.Class) map[string][]entities.Class {
    classMap := make(map[string][]entities.Class)
    for _, class := range classes {
        classMap[class.ClassType.Name] = append(classMap[class.ClassType.Name], class)
    }
    return classMap
}

সমস্যাটি এখন এটির মাধ্যমে আমি কীভাবে পুনরাবৃত্তি করতে পারি, http://golang.org/pkg/text/template/ অনুসারে আপনাকে এটিকে .Keyফর্ম্যাটে অ্যাক্সেস করতে হবে, আমি কীগুলি জানি না (যদি আমি একটি টুকরোও পাস না করি তবে) টেমপ্লেট মধ্যে কী এর)। আমি কীভাবে আমার দৃষ্টিতে এই মানচিত্রটি আনপ্যাক করব।

আমার কাছে বর্তমানে যা আছে তা

{{ . }} 

যা এরকম কিছু প্রদর্শন করে:

map[Pilates:[{102 PILATES ~/mobifit/video/ocen.mpg 169 40 2014-05-03 23:12:12 +0000 UTC 2014-05-03 23:12:12 +0000 UTC 1899-12-30 00:00:00 +0000 UTC {PILATES Pilates 1 2014-01-22 21:46:16 +0000 UTC} {1 leebrooks0@gmail.com password SUPERADMIN Lee Brooks {Male true} {1990-07-11 00:00:00 +0000 UTC true} {1.85 true} {88 true} 2014-01-22 21:46:16 +0000 UTC {0001-01-01 00:00:00 +0000 UTC false} {0001-01-01 00:00:00 +0000 UTC false} {0001-01-01 00:00:00 +0000 UTC false}} [{1 Mat 2014-01-22 21:46:16 +0000 UTC}]} {70 PILATES ~/mobifit/video/ocen.mpg 119 66 2014-03-31 15:12:12 +0000 UTC 2014-03-31 15:12:12 +0000 UTC 1899-12-30 00:00:00 +0000 UTC 

উত্তর:


170

গো টেম্পলেট ডক্সে ভেরিয়েবল বিভাগটি পরীক্ষা করুন । একটি পরিসীমা কমা দ্বারা পৃথকীকৃত দুটি ভেরিয়েবল ঘোষণা করতে পারে। নিম্নলিখিতগুলি কাজ করা উচিত:

{{ range $key, $value := . }}
   <li><strong>{{ $key }}</strong>: {{ $value }}</li>
{{ end }}

47

হারমান নির্দেশিত হিসাবে, আপনি প্রতিটি পুনরাবৃত্তি থেকে সূচক এবং উপাদান পেতে পারেন।

{{range $index, $element := .}}{{$index}}
{{range $element}}{{.Value}}
{{end}}
{{end}}

কাজের উদাহরণ:

package main

import (
    "html/template"
    "os"
)

type EntetiesClass struct {
    Name string
    Value int32
}

// In the template, we use rangeStruct to turn our struct values
// into a slice we can iterate over
var htmlTemplate = `{{range $index, $element := .}}{{$index}}
{{range $element}}{{.Value}}
{{end}}
{{end}}`

func main() {
    data := map[string][]EntetiesClass{
        "Yoga": {{"Yoga", 15}, {"Yoga", 51}},
        "Pilates": {{"Pilates", 3}, {"Pilates", 6}, {"Pilates", 9}},
    }

    t := template.New("t")
    t, err := t.Parse(htmlTemplate)
    if err != nil {
        panic(err)
    }

    err = t.Execute(os.Stdout, data)
    if err != nil {
        panic(err)
    }

}

আউটপুট:

Pilates
3
6
9

Yoga
15
51

খেলার মাঠ: http://play.golang.org/p/4ISxcFKG7v


আরে @ ইউনিসাস, আমার নীচের মতো টেম্পলেটটির মাধ্যমে জেসন উত্পন্ন করার প্রয়োজন রয়েছে তবে এটিতে অ্যাড্রেস অ্যারের মতো অতিরিক্ত কমাও রয়েছে উদাহরণস্বরূপ আউটপুট `` `name" নাম ":" মুস "," অ্যাড্রেসস ": [address" ঠিকানা ":" এ "}, {" ঠিকানা ":" বি "},]}` `` উদাহরণ কোডের লিঙ্ক play.golang.org/p/nD08y0noPHv
মোহাম্মদ

4
@ মোহাম্মদমুস্তাকিম আপনি প্রতিটি পুনরাবৃত্তির সূচিটি পরীক্ষা করতে পারেন এবং প্রথম পুনরাবৃত্তিতে কমা যোগ করতে পারেন না। উদাহরণ দেখুন: play.golang.org/p/5544hc_0_g8 । শুধুমাত্র সতর্ক হও. টেমপ্লেটগুলির সাথে জেএসএন রেন্ডারিংয়ের ফলে অব্যাহতিজনিত সমস্যা দেখা দেবে। আমি যুক্ত করা "সিএন্ডডি" ঠিকানাটি দেখুন।
আনিসাস

ধন্যবাদ আমি "এইচটিএমএল / টেমপ্লেট" এর পরিবর্তে "পাঠ্য / টেমপ্লেট" আমদানি করে পালানোর সমস্যাটি সমাধান করেছি। play.golang.org/p/PXTNZGWx7Yi
মোহাম্মদ

4
@ মোহাম্মদমুস্তাকিম, দুর্ভাগ্যক্রমে আপনি এখন অবৈধ জেএসএন পেতে পারেন, বা আরও খারাপ, ইনজেকশনের জেএসওএন: play.golang.org/p/kd9bM_rpwyg । জেসন উত্পন্ন করার জন্য টেমপ্লেট ব্যবহার করা বুদ্ধিমানের কাজ নয়, তবে আপনাকে যদি করতে হয় তবে জেএস (যেমন এই উদাহরণেও) এর মতো ফাংশনগুলি সহ JSON মানগুলি থেকে মুক্তি পান।
আনিসাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.