خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

قالب HTML با Go

قالب ها به شما امکان می دهند توسعه فرانت اند را از منطق کسب و کار و برنامه نویسی باطن خود جدا کنید. و Go دارای پشتیبانی قالب عالی داخلی است.

هنگامی که در حال ساخت یک وب سایت هستید، معمولاً برخی از محتوای نهایی خود را به صورت پویا تولید می کنید. سپس می خواهید آن داده ها را برای نمایش در یک مرورگر به صفحات وب نهایی خود تزریق کنید.

شما می توانید یکی از دو روش را انتخاب کنید: ساختار صفحه خود را در برنامه خود جاسازی کنید، یا داده های نهایی خود را با فایل های قالب جداگانه ترکیب کنید.

الگوسازی جداسازی نگرانی‌ها را برای یک پایگاه کد قابل نگهداری‌تر فراهم می‌کند. همچنین تقسیم وظایف فرانت‌اند و وظایف بک‌اند را آسان‌تر می‌کند و آن‌ها را به اعضای مختلف تیم اختصاص می‌دهد. Go در کتابخانه استاندارد خود از قالب بندی عالی پشتیبانی می کند.

شروع کار با الگوسازی در Go

Go دارای دو بسته قالب در کتابخانه استاندارد است: text/template و html/template. بسته متن/الگو قابلیتی برای تجزیه فایل های متنی دارد، در حالی که html/قالب HTML را مدیریت می کند. با استفاده از html/قالب از حملات بین سایتی اسکریپت (XSS) در امان هستید زیرا Go از ورود داده ها در حین رندر فرار می کند. این یکی دیگر از مزایای الگوسازی نسبت به رویکرد دستی است.

از آنجایی که بسته قالب بخشی از کتابخانه استاندارد است، نیازی به نصب هیچ گونه وابستگی نخواهید داشت. فقط آن را وارد کنید:

import"html/template"

با ایجاد یک فایل HTML برای استفاده به عنوان یک الگو برای برنامه خود شروع کنید. می توانید از پسوند استاندارد .html یا .gohtml یا .tmpl استفاده کنید که هر دو نیز رایج هستند. از هر افزونه ای که استفاده می کنید، عملکرد برنامه شما یکسان خواهد بود. برخی از ویرایشگرهای متن ممکن است بسته به پسوند قالب‌های شما، برجسته‌سازی نحو متفاوتی را اعمال کنند. در اینجا یک اسکلت اساسی وجود دارد:

<!DOCTYPE html>
<htmllang="en">
<head>
    <metacharset="UTF-8">
    <title>Document</title>
</head>
<body>
 
</body>
</html>

این فایل را در دایرکتوری برنامه Go خود ذخیره کنید. اکنون می توانید به عنوان یک الگو در برنامه خود کار با آن را شروع کنید.

مطلب مرتبط:   توابع رشته SQL: 10 مورد از مفیدترین

یک نمونه جهانی از متد Template بسته قالب ایجاد کنید. از قسمت های مختلف برنامه خود به این نمونه الگو دسترسی خواهید داشت.

var tmplt *template.Template

شما باید یک سرور ساده برای رندر و نمایش الگوهای خود ایجاد کنید. در اینجا نحوه راه اندازی یک سرور ساده در Go با استفاده از بسته net/http آورده شده است:

funcrunServer() {
    http.HandleFunc("/home", handlePage)
    err := http.ListenAndServe("localhost:8080", nil)
 
    if err != nil {
        log.Fatalln("There's an error with the server:", err)
    }
}

برای راه اندازی سرور، تابع runServer را از تابع اصلی خود فراخوانی می کنید. سرور فقط یک مسیر دارد، مسیر /home که صفحه شما را نمایش می دهد. پارامتر handlePage نام تابع handler است که صفحه شما را رندر می کند. متد ListenAndServe شروع به گوش دادن سرور در پورت 8080 در لوکال هاست، یعنی رایانه شخصی شما می کند.

انتقال متغیرها به قالب ها

یک ساختار جهانی به نام News ایجاد کنید:

type News struct {
    Headline string
    Body string
}

شما از این ساختار برای ذخیره داده ها و ارسال آن به قالب خود برای نمایش در صفحه نهایی خود استفاده خواهید کرد. در قالب خود، می توانید از این نحو برای تزریق داده استفاده کنید:

{{ name }}

جایی که name نام متغیری است که به قالب خود ارسال کرده اید. وقتی الگو را رندر می‌کنید، مقادیر موجود در پرانتز را با داده‌های مربوطه از کد Go شما جایگزین می‌کند. از آنجایی که مثال زیر یک ساختار را ارسال می کند، برای دسترسی به فیلدهای آن از نماد نقطه استفاده خواهید کرد:

<body>
    <h1>{{ .Headline }}</h1>
    <p> {{ .Body }} </p>
</body>

عنصر بدنه خالی در نشانه گذاری اسکلت الگوی خود را با کد بالا جایگزین کنید.

مطلب مرتبط:   10 بهترین خدمات لینک سازی

تابع handlePage کنترل می کند که درخواست صفحه یک درخواست GET است. سپس یک ساختار را با داده های نمونه پر می کند قبل از اینکه الگو را رندر کند و صفحه نهایی را ارائه دهد:

funchandlePage(writer http.ResponseWriter, request *http.Request) {
    if request.Method == "GET" {
        tmplt, _ = template.ParseFiles("tutorial.html")
 
        event := News{
            Headline: "makeuseof.com has everything Tech",
            Body: "Visit MUO for anything technology related",
        }
 
        err := tmplt.Execute(writer, event)
 
        if err != nil {
            return
        }
    }
}

متد ParseFiles فایل HTML که شما مشخص کرده اید را تجزیه می کند. متغیر رویداد ساختار اولیه است. متد Execute داده های ارائه شده را با توجه به مکان های موجود در قالب به صفحه نهایی تزریق می کند. Execute یک ResponseWriter و داده ها، در این مورد، ساختار را می گیرد.

در اینجا نتیجه اجرای سرور و بازدید از صفحه است:

یک صفحه وب با عنوان و یک پاراگراف متن

استفاده از ساختارهای کنترلی در قالب ها

همچنین می توانید از ساختارهای کنترلی مانند دستورات شرطی و حلقه ها در قالب های خود استفاده کنید.

یک حلقه به شما این امکان را می دهد که چندین مقدار را خروجی بگیرید و از همان ساختار برای هر کدام دوباره استفاده کنید. از کلمه کلیدی range برای تعریف ابتدای محتوای تکراری و کلمه کلیدی پایان برای پایان استفاده کنید. در حلقه می توانید از دستور {{.}} برای تزریق مقدار فعلی استفاده کنید:

<ol>
    {{range .}}
    <li>{{.}}</li>
    {{end}}
</ol>

سپس نام ساختار داده‌ای را که می‌خواهید از آن حلقه بزنید به عنوان پارامتر به متد Execute ارسال می‌کنید:

makeUseOfCategories := []string{"Technology Explained", "Programming", "Linux",
   "Android", "iOS", "Many More................"}
 
err := tmplt.Execute(writer, makeUseOfCategories)
 
if err != nil {
    return
}

متغیر makeUseOfCategories تکه ای از رشته ها است که به عنوان پارامتر داده ارسال می شود. در اینجا نتیجه حلقه زدن از طریق برش است:

مطلب مرتبط:   شروع کار با Sveltestrap

یک صفحه وب که فهرستی از دسته‌های MUO را نشان می‌دهد

می توانید از یک دستور شرطی در قالب های خود برای آزمایش مقدار یک متغیر بولی استفاده کنید. یک ساختار با فیلدهای بولی مانند زیر ایجاد کنید:

type TrueFalser struct {
    IsTrue bool
    IsFalse bool
    IsDefault bool
}

برای استفاده از یک شرطی، قبل از نام متغیر مورد آزمایش، کلمه کلیدی if را در دو پرانتز قرار دهید. بلوک شرطی را با کلمه کلیدی انتهایی در پرانتز پایان دهید:

{{if .IsTrue}}
    <p>Evaluates true and will output</p>
{{end}}
 
{{if .IsDefault}}
    <p>Evaluates false and won't output</p>
{{end}}
 
{{if .IsFalse}}
    <p>Evaluates false and won't output</p>
{{end}}

راه‌اندازی یک ساختار در Go، مقادیر را در حالت پیش‌فرض روی false قرار می‌دهد، بنابراین اگر یک فیلد را مقداردهی اولیه نکنید، آن را به false ارزیابی می‌کند. با مقداردهی اولیه ساختار و ارسال متغیر به عنوان داده به الگو، تنها فیلدهایی که به درستی ارزیابی می شوند باعث ظاهر شدن خروجی می شوند.

choice := TrueFalser {
    IsTrue: true,
    IsFalse: false,
}
 
err := tmplt.Execute(writer, choice)

خروجی نهایی فقط شامل یک پاراگراف است زیرا فقط فیلد isTrue درست است:

یک صفحه وب که یک مورد از عبارت "درست ارزیابی می کند" را نشان می دهد.

شما مجبور نیستید از الگوها برای برنامه های کاربردی Backend خود استفاده کنید

الگوسازی برای برنامه‌های Go شما الزامی نیست. شما می توانید از روش های دیگری مانند تعبیه ساختار صفحه خود در برنامه خود، در کنار منطق و رفتارهای دیگر استفاده کنید.

با این حال، در نهایت کار بیشتری برای خودتان انجام خواهید داد. قالب Go به جلوگیری از حملات XSS کمک می کند و جدا کردن کار در ساختار صفحه را از منطق باطن آسان تر می کند.