Saat Anda membangun situs web, Anda biasanya akan menghasilkan beberapa konten akhir Anda secara dinamis. Anda kemudian ingin memasukkan data itu ke halaman web akhir Anda untuk ditampilkan di browser.
Anda dapat mengambil salah satu dari dua pendekatan: menanamkan struktur halaman Anda ke dalam program Anda, atau menggabungkan data akhir Anda dengan file template terpisah.
Templating memberikan pemisahan masalah untuk basis kode yang lebih dapat dipelihara. Ini juga memudahkan untuk membagi tugas front-end dan tugas back-end, mengalokasikannya ke anggota tim yang berbeda. Go memiliki dukungan templating yang sangat baik di perpustakaan standarnya.
Memulai Pembuatan Template di Go
Go memiliki dua paket templating di pustaka standar: teks/templat dan html/templat. Paket teks/templat memiliki fungsi untuk mem-parsing file teks, sedangkan html/templat menangani HTML. Dengan menggunakan html/templat, Anda aman dari serangan skrip lintas situs (XSS) karena Go lolos dari entri data selama rendering. Ini adalah keuntungan lain dari templating dibandingkan pendekatan manual.
Karena paket template adalah bagian dari pustaka standar, Anda tidak perlu menginstal dependensi apa pun; impor saja:
impor "html/template"
Mulai dari membuat file HTML untuk digunakan sebagai template untuk aplikasi Anda. Anda dapat menggunakan standar .html ekstensi atau keduanya .gohtml atau .tmpl, keduanya yang juga umum. Apa pun ekstensi yang Anda gunakan, fungsionalitas dalam aplikasi Anda akan sama. Beberapa editor teks mungkin menerapkan penyorotan sintaks yang berbeda tergantung pada ekstensi template Anda. Inilah kerangka dasar:
<!DOCTYPE html>
<html lang="id">
<kepala>
<rangkaian meta ="UTF-8">
<judul>Dokumen</title>
</head>
<tubuh>
</body>
</html>
Simpan file ini di direktori program Go Anda. Anda sekarang dapat mulai bekerja dengannya, sebagai template, di dalam program Anda.
Buat instance global dari Templat metode paket template. Anda akan mengakses contoh template ini dari berbagai bagian program Anda.
var tmplt *template. Templat
Anda harus membuat server sederhana untuk merender dan menampilkan template Anda. Berikut cara memulai server sederhana di Go menggunakan bersih/http kemasan:
fungsimenjalankan Server() {
http. HandleFunc("/home", handlePage)
salah := http. ListenAndServe("host lokal:8080", nol)
jika salah != nol {
catatan. Fatalln("Ada kesalahan dengan server:", err)
}
}
Anda akan menelepon menjalankan Server fungsi dari fungsi utama Anda untuk memulai server. Server hanya memiliki satu rute, yaitu /home route, yang akan menampilkan halaman Anda. Itu halaman pegangan parameter adalah nama fungsi handler yang akan merender halaman Anda. Itu DengarkanDanLayani metode memulai server mendengarkan pada port 8080 pada localhost, yaitu komputer Anda sendiri.
Melewati Variabel ke Template
Buat struct global bernama Berita:
Tipe Berita struktur {
Judul: rangkaian
Tubuh rangkaian
}
Anda akan menggunakan struct ini untuk menyimpan data dan meneruskannya ke template Anda untuk ditampilkan di halaman akhir Anda. Di template Anda, Anda kemudian dapat menggunakan sintaks ini untuk menyuntikkan data:
{{ nama }}
Di mana nama adalah nama variabel yang telah Anda berikan ke template Anda. Saat Anda merender template, itu akan menggantikan nilai dalam kurung kurawal dengan data yang sesuai dari kode Go Anda. Karena contoh berikut akan melewati struct, Anda akan menggunakan notasi titik untuk mengakses bidangnya:
<tubuh>
<h1>{{ .Judul }}</h1>
<p> {{ .Tubuh }} </p>
</body>
Ganti elemen tubuh kosong di markup kerangka template Anda dengan kode di atas.
Itu halaman pegangan fungsi handler akan memverifikasi bahwa permintaan untuk halaman tersebut adalah permintaan GET. Ini kemudian mengisi struct dengan data sampel sebelum merender template dan menyajikan halaman terakhir:
fungsihalaman pegangan(penulis http. ResponseWriter, minta *http. Meminta) {
jika meminta. Metode == "DAPATKAN" {
tmplt, _ = templat. ParseFile("tutorial.html")acara := Berita{
Judul: "makeuseof.com memiliki segalanya Tek",
Tubuh: "Kunjungi MUO untuk segala sesuatu yang berhubungan dengan teknologi",
}salah := tmplt. Jalankan (penulis, acara)
jika salah != nol {
kembali
}
}
}
Itu ParseFiles metode mem-parsing file HTML yang Anda tentukan. Itu peristiwa variabel adalah struct yang diinisialisasi. Itu Menjalankan metode akan menyuntikkan data yang disediakan ke halaman akhir, sesuai dengan placeholder di template. Jalankan mengambil Penulis Tanggapan dan data, dalam hal ini, struct.
Inilah hasil dari menjalankan server dan mengunjungi halaman:
Menggunakan Struktur Kontrol di Template
Anda juga dapat menggunakan struktur kontrol seperti pernyataan bersyarat, dan loop di template Anda.
Sebuah loop memungkinkan Anda untuk menampilkan beberapa nilai dan menggunakan kembali struktur yang sama untuk masing-masing nilai. Menggunakan jangkauan kata kunci untuk menentukan awal dari konten yang diulang dan akhir kata kunci untuk akhir. Dalam loop Anda dapat menggunakan {{.}} sintaks untuk menyuntikkan nilai saat ini:
{{jangkauan .}}
- {{.}}
{{akhir}}
Kemudian Anda akan meneruskan nama struktur data yang ingin Anda ulangi sebagai parameter ke metode Execute:
makeUseOfCategories := []rangkaian{"Teknologi Dijelaskan", "Pemrograman", "Linux",
"Android", "iOS", "Banyak Lagi..."}salah := tmplt. Jalankan (penulis, makeUseOfCategories)
jika salah != nol {
kembali
}
Itu makeUseOfCategories variabel adalah sepotong string untuk lulus sebagai parameter data. Inilah hasil perulangan melalui irisan:
Anda dapat menggunakan pernyataan kondisional di template Anda untuk menguji nilai variabel boolean. Buat struct dengan bidang boolean, seperti ini:
Tipe BenarFalser struktur {
Adalah benar bool
salah bool
Apakah Default bool
}
Untuk menggunakan kondisional, sertakan jika kata kunci dalam kurung kurawal ganda sebelum nama variabel yang akan diuji. Akhiri blok bersyarat dengan akhir kata kunci dalam kurung:
{{jika .Benar}}
<p>Mengevaluasi benar dan akan menghasilkan</p>
{{akhir}}{{jika .Apakah Default}}
<p>Mengevaluasi salah dan menang'keluaran t</p>
{{akhir}}
{{jika .Salah}}
<p>Mengevaluasi salah dan menang'keluaran t</p>
{{akhir}}
Menginisialisasi struct di Go menyetel nilai ke false pada default, jadi jika Anda tidak menginisialisasi bidang, itu akan dievaluasi menjadi false. Saat menginisialisasi struct dan meneruskan variabel sebagai data ke template, hanya bidang yang bernilai true yang menyebabkan output muncul.
pilihan := TrueFalser {
Adalah benar: BENAR,
Salah: Salah,
}
salah := tmplt. Jalankan (penulis, pilihan)
Hasil akhir hanya mencakup satu paragraf karena hanya bidang isTrue yang bernilai true:
Anda Tidak Perlu Menggunakan Template untuk Aplikasi Backend Anda
Pembuatan template bukanlah persyaratan untuk aplikasi Go Anda. Anda dapat menggunakan pendekatan lain seperti menyematkan struktur halaman Anda ke dalam program Anda, di samping logikanya dan perilaku lainnya.
Namun, pada akhirnya Anda akan menghasilkan lebih banyak pekerjaan untuk diri sendiri. Go templating membantu mencegah serangan XSS dan mempermudah pemisahan pekerjaan pada struktur halaman dari logika backend.