"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية التقاط وتعيين إخراج قالب Go إلى متغير؟

كيفية التقاط وتعيين إخراج قالب Go إلى متغير؟

تم النشر بتاريخ 2024-12-22
تصفح:398

How to Capture and Assign Go Template Output to a Variable?

التقاط مخرجات القالب في Go

داخل قالب Go، يتم التقاط مخرجات القالب الفرعي أو تعيينه إلى متغير مباشرة غير مدعوم بشكل افتراضي. ومع ذلك، يمكن تحقيق ذلك من خلال تسجيل دالة مخصصة واستخدام مخزن مؤقت للبايتات لتلقي نتيجة القالب.

تسجيل الوظائف المخصصة

لالتقاط مخرجات القالب، سجل دالة ذات Template.Funcs() تأخذ اسم القالب كوسيطة وترجع مخرجات القالب كسلسلة:

func execTempl(name string) (string, error) {
    buf := &bytes.Buffer{}
    err := t.ExecuteTemplate(buf, name, nil)
    return buf.String(), err
}

تنفيذ القالب والتقاط النتائج

تنفيذ القالب الفرعي المسمى 'my-template' باستخدام Template.ExecuteTemplate() وتعيينه إلى متغير:

{{$var := execTempl "my-template"}}
{{$var := execTempl "my-template"}}

الإخراج استرجاع

استرجاع المخرجات التي تم التقاطها واستخدامها حسب الحاجة:

شاهد النتيجة: {{$var}}
{{$var := execTempl "my-template"}}

مثال كاملvar t *template.Template الوظيفة الرئيسية () { t = template.Must(template.New("").Funcs(template.FuncMap{ "execTempl": execTempl، }).تحليل (تمبل)) إذا أخطأت := t.Execute(os.Stdout, nil); يخطئ! = لا شيء { الذعر (خطأ) } } ثابت tmpl = ` {{define "my-template"}}محتوى القالب الخاص بي{{end}} انظر النتيجة: {{$var := execTempl "my-template"}} {{$فار}} `

var t *template.Template

func main() {
    t = template.Must(template.New("").Funcs(template.FuncMap{
        "execTempl": execTempl,
    }).Parse(tmpl))

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

const tmpl = `
{{define "my-template"}}my-template content{{end}}

See result:
{{$var := execTempl "my-template"}}
{{$var}}
`
الإخراج:

شاهد النتيجة: محتوى القالب الخاص بي

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3