Bir web sitesi oluştururken, genellikle nihai içeriğinizin bir kısmını dinamik olarak oluşturursunuz. Ardından, bir tarayıcıda görüntülenmek üzere bu verileri son web sayfalarınıza enjekte etmek isteyeceksiniz.

İki yaklaşımdan birini kullanabilirsiniz: sayfa yapınızı programınıza gömün veya son verilerinizi ayrı şablon dosyalarıyla birleştirin.

Şablonlama, daha sürdürülebilir bir kod tabanı için endişelerin ayrılmasını sağlar. Ayrıca, ön uç görevleri ve arka uç görevlerini farklı ekip üyelerine atayarak ayırmayı kolaylaştırır. Go, standart kitaplığında mükemmel şablonlama desteğine sahiptir.

Go'da Şablon Oluşturmaya Başlarken

Go'nun standart kitaplığında iki şablonlama paketi vardır: metin/şablon ve html/şablon. Metin/şablon paketi, metin dosyalarını ayrıştırma işlevine sahiptir, html/şablon ise HTML'yi işler. Go, oluşturma sırasında veri girişinden kaçtığından, html/şablonu kullanarak siteler arası komut dosyası çalıştırma (XSS) saldırılarından korunursunuz. Bu, manuel bir yaklaşıma göre şablonlamanın başka bir avantajıdır.

instagram viewer

Şablon paketi standart kitaplığın bir parçası olduğundan, herhangi bir bağımlılık yüklemeniz gerekmez; sadece içe aktarın:

içe aktarmak "html/şablon"

La başlamak HTML dosyası oluşturma uygulamanız için bir şablon olarak kullanmak için. standart kullanabilirsiniz .html uzatma ya da .gohtml veya .tmpl, her ikisi de ortak olanlardır. Hangi uzantıyı kullanırsanız kullanın, uygulamanızdaki işlevsellik aynı olacaktır. Bazı metin düzenleyiciler, şablonlarınızın uzantılarına bağlı olarak farklı söz dizimi vurgulamaları uygulayabilir. İşte temel bir iskelet:

<!DOCTYPE html>
<html dili="tr">
<kafa>
<meta karakter kümesi="UTF-8">
<Başlık>Belge</title>
</head>
<gövde>

</body>
</html>

Bu dosyayı Go programınızın dizinine kaydedin. Artık programınız içinde şablon olarak onunla çalışmaya başlayabilirsiniz.

Küresel bir örneğini oluşturun Şablon şablon paketinin yöntemi. Bu şablon örneğine programınızın çeşitli bölümlerinden erişeceksiniz.

var tmplt * şablon. Şablon

Şablonlarınızı oluşturmak ve görüntülemek için basit bir sunucu oluşturmanız gerekecek. Go'da basit bir sunucuyu şu şekilde başlatabilirsiniz: net/http paket:

işlevrunServer() {
http. HandleFunc("/home", handlePage)
hata := http. ListenAndServe("localhost:8080", sıfır)

eğer hata != sıfır {
kayıt. Fatalln("Sunucuda bir hata var:", err)
}
}

arayacaksın runServer sunucuyu başlatmak için ana işlevinizden işlev. Sunucunun yalnızca bir yolu vardır, /home sayfanızı gösterecek olan rota. bu tanıtıcıSayfa parametre, sayfanızı oluşturacak bir işleyici işlevinin adıdır. bu DinleAndServe yöntem, sunucuyu bağlantı noktasında dinlemeye başlar 8080 üzerinde localhost, yani kendi bilgisayarınız.

Değişkenleri Şablonlara Geçmek

adlı global bir yapı oluşturun Haberler:

tip Haberler yapı {
Başlık sicim
Gövde sicim
}

Bu yapıyı verileri depolamak ve son sayfanızda görüntülemek üzere şablonunuza iletmek için kullanacaksınız. Şablonunuzda, verileri enjekte etmek için bu sözdizimini kullanabilirsiniz:

{{ isim }}

Neresi isim şablonunuza ilettiğiniz bir değişkenin adıdır. Şablonu oluşturduğunuzda, parantez içindeki değerleri Go kodunuzdaki ilgili verilerle değiştirir. Aşağıdaki örnek bir yapıyı geçeceğinden, alanlarına erişmek için nokta gösterimini kullanacaksınız:

<gövde>
<h1>{{ .Başlık }}</h1>
<p> {{ .Gövde }} </p>
</body>

Şablonunuzun iskelet işaretlemesindeki boş gövde öğesini yukarıdaki kodla değiştirin.

bu tanıtıcıSayfa işleyici işlevi, sayfanın isteğinin bir GET isteği olduğunu doğrulayacaktır. Ardından, şablonu oluşturmadan ve son sayfayı sunmadan önce bir yapıyı örnek verilerle doldurur:

işlevtanıtıcıSayfa(yazar http. ResponseWriter, istek * http. Rica etmek) {
eğer rica etmek. Yöntem == "GET" {
tmplt, _ = şablon. ParseFiles("tutorial.html")

etkinlik := Haberler{
Başlık: "makeuseof.com'da Tech ile ilgili her şey var",
Gövde: "MUO'yu ziyaret edin için teknoloji ile ilgili her şey",
}

hata := tmplt. Yürüt (yazar, olay)

eğer hata != sıfır {
dönüş
}
}
}

bu Ayrıştırma Dosyaları method belirttiğiniz HTML dosyasını ayrıştırır. bu Etkinlik değişken, başlatılmış yapıdır. bu Uygulamak yöntemi, şablondaki yer tutuculara göre sağlanan verileri son sayfaya enjekte edecektir. Yürütme bir alır Yanıt Yazarı ve veriler, bu durumda yapı.

Sunucuyu çalıştırmanın ve sayfayı ziyaret etmenin sonucu:

Şablonlarda Kontrol Yapılarını Kullanma

Şablonlarınızda koşullu ifadeler ve döngüler gibi kontrol yapılarını da kullanabilirsiniz.

Bir döngü, birkaç değer çıktısı almanıza ve her biri için aynı yapıyı yeniden kullanmanıza izin verir. Kullan Aralık tekrarlanan içeriğin başlangıcını tanımlamak için anahtar kelime ve son sonu için anahtar kelime. Döngü içinde şunları kullanabilirsiniz: {{.}} geçerli değeri enjekte etmek için sözdizimi:


    {{Aralık .}}
  1. {{.}}

  2. {{son}}

Ardından, döngüye almak istediğiniz veri yapısının adını Execute yöntemine parametre olarak ileteceksiniz:

makeUseOfCategories := []sicim{"Teknolojinin Açıklaması", "Programlama", "Linux",
"Android", "iOS", "Daha Fazlası..."}

hata := tmplt. Yürüt (yazar, makeUseOfCategories)

eğer hata != sıfır {
dönüş
}

bu makeUseOfKategoriler değişken, veri parametresi olarak iletilecek bir dizi dizidir. İşte dilim boyunca döngünün sonucu:

Bir boole değişkeninin değerini test etmek için şablonlarınızda koşullu bir ifade kullanabilirsiniz. Bunun gibi boole alanlarıyla bir yapı oluşturun:

tip TrueFalser yapı {
Doğru bool
Yanlış bool
Varsayılan bool
}

Koşullu kullanmak için şunları ekleyin: eğer test edilecek değişkenin adından önce çift parantez içinde anahtar kelime. Koşullu bloğu şununla sonlandırın: son parantez içindeki anahtar kelime:

{{if .IsTrue}}
<p>Doğruyu değerlendirir ve çıktı verir</p>
{{son}}

{{if .IsDefault}}
<p>Yanlış değerlendirir ve kazanır't çıkışı</p>
{{son}}

{{if .IsFalse}}
<p>Yanlış değerlendirir ve kazanır't çıkışı</p>
{{son}}

Go'da bir yapıyı başlatmak, değerleri varsayılan olarak false olarak ayarlar, bu nedenle bir alanı başlatmazsanız false olarak değerlendirilir. Yapıyı başlatırken ve değişkeni şablona veri olarak geçirirken, yalnızca doğru olarak değerlendirilen alanlar çıktının görünmesine neden olur.

seçim := TrueFalser {
Doğru: doğru,
Yanlış: yanlış,
}

hata := tmplt. Yürüt (yazar, seçim)

Yalnızca isTrue alanı true olarak değerlendirdiğinden, son çıktı yalnızca tek bir paragraf içerir:

Arka Uç Uygulamalarınız için Şablon Kullanmanız Gerekmiyor

Go uygulamalarınız için şablon oluşturma bir gereklilik değildir. Mantığı ve diğer davranışlarının yanı sıra sayfa yapınızı programınıza gömmek gibi diğer yaklaşımları kullanabilirsiniz.

Ancak, sonunda kendiniz için daha fazla iş yapacaksınız. Go şablonlama, XSS saldırılarını önlemeye yardımcı olur ve sayfa yapısındaki çalışmayı arka uç mantığından ayırmayı kolaylaştırır.