Pengenalan Template Action
Tidak hanya teks saja kita bisa render dalam template tetapi kita juga bisa mendukung perintah action seperti percabangan if, perulangan for dan lain-lain.
Contoh misalkan kita menggunakan percabangan if seperti ini
Percabangan dengan satu kondisi
{{if .Value}} A1 {{ end }}
Jika Value tidak kosong, maka A1 akan dieksekusi dan jika kosong tidak ada yang akan di eksekusi
Percabangan dengan 2 kondisi
{{if .Value}} A1 {{ else }} A2 {{ end }}
Jika Value tidak kosong, maka A1 akan dieksekusi dan jika kosong akan mengeksekusi A2.
Percabangan dengan 3 Kondisi
{{if .Value1}} A1 {{else if .Value2}} A2 {{ else }} A3 {{ end }}
Jika Value1 tidak kosong, maka A1 akan dieksekusi dan jika Value2 tidak kosong maka akan mengeksekusi A2 dan jika tidak semuanya maka A3 akan dieksekusi.
Implementasi Template If Statement
Berikut ini contoh implementasi template jika kita menggunakan kondisi If statement pada file if.html
<html>
	<body>
		{{if .Name}}
		<h1>Hello {{.Name}}</h1>
		{{else}}
		<h1>Hai</h1>
		{{ end }}
	</body>
</html>
Lalu kita lanjutkan dengan membuat handler fungsi untuk menampilkan halaman yg sudah kita buat.
func TemplateActionIfHandler(w http.ResponseWriter, r *http.Request) {
	t := template.Must(template.ParseFiles("./templates/if.html"))
	t.ExecuteTemplate(w, "if.html", map[string]interface{}{
		"Name": "Santekno",
	})
}
Pada handler ini kita menggunakan map[string]interface{} untuk mengirim data dari handler. Selanjutnya jangan lupa kita tambahkan juga pada route pada file main.go agar halaman yang sudah kita buat bisa di akses pada browser.
mux.HandleFunc("/template-action-if",TemplateActionIfHandler)
Implementasi Template Operator Statement
Selain mendukung kondisi, operator perbandingan pun sudah didukung oleh golang template sehingga kita bisa gunakan untuk membandingkan numer di if statement berikut contoh operator-nya.
| Operator | Contoh | 
|---|---|
| eq | arg1 == arg2 | 
| ne | arg1 != arg2 | 
| lt | arg1 < arg2 | 
| le | arg1 <= arg2 | 
| gt | arg1 > arg2 | 
| ge | arg1 >= arg2 | 
Baiklah kita akan coba implementasikan operator yang ada dengan menggunakan if statement. Anda bisa buat file baru dengan nama file comparator.html dengan isi html seperti dibawah ini.
<html>
	<body>
		{{if ge .Value 80}}
		<h1>Good</h1>
		{{else if ge .Value 60}}
		<h1>Nice Try</h1>
		{{else}}
		<h1>Try Again</h1>
		{{end}}
  </body>
</html>
Kenapa operatornya di depan?
Hal ini dikarenakan operator perbandingan ini sebuah function atau sering kita dengar function programming. Jadi saat kita menggunakan {{eq First Second}} sebenarnya dia akan memanggil fungsi eq dengan parameter First dan Second atau lebih fammiliarnya seperti ini eq(First,Second).
Selanjutnya kita buat fungsi handler dengan nama TemplateActionComparatorHandler pada file http_handler.go dengan detailnya seperti ini.
func TemplateActionComparatorHandler(w http.ResponseWriter, r *http.Request) {
	t := template.Must(template.ParseFiles("./templates/comparator.html"))
	t.ExecuteTemplate(w, "comparator.html", map[string]interface{}{
		"Name":  "Santekno",
		"Value": 100,
	})
}
Dan yang terakhir kita tambahkan juga fungsi handler-nya pada file main.go.
	mux.HandleFunc("/template-action-comparator", TemplateActionComparatorHandler)
Selesai, kita jalankan program kita dan akan menampilkan nama dan value Good karena nilainya dari variabel value adalah 100. Coba kita ganti menjadi 60 apa yang akan terjadi? Maka akan keluar Nice Try.
Operasi Perulangan menggunakan Range
Range adalah operasi perulangan atau iterasi yang dilakukan pada data template. Dalam Golang template perulangan ini tidak bisa menggunakan for. Biasanya perulangan data ini menggunakan range untuk iterasi tiap data array, slice, map ataupun channel. Contohnya
{{ range $index, $element := .Value }}
	A1
{{ end }}
Jika Value memiliki data, maka A1 akan dieksekusi sebanyak element value dan kita bisa menggunakan $index untuk mengakses index dan $element untuk mengakses elementnya.
Contoh lagi misalkan seperti ini
{{ range $index, $element := .Value }}
	A1
{{ else }}
	A2
{{ end }}
Pada contoh kedua ini sebenarnya sama seperti halnya contoh yang pertama namun jika ada value tidak memiliki element apapun maka A2 yang akan dieksekusi.
Kita coba langsung dengan membuat file range.html dengan isi kode html seperti dibawah ini.
<html>
	<body>
		{{range $index, $element := .Hobbies}}
			<h1>{{ $element }}</h1>
		{{else}}
			<h1>Anda tidak punya hobi</h1>
		{{end}}
	</body>
</html>
Dan selanjutnya kita akan membuat handler dengan template yang sudah dibuat diatas.
func TemplateActionRangeHandler(w http.ResponseWriter, r *http.Request) {
	t := template.Must(template.ParseFiles("./templates/range.html"))
	t.ExecuteTemplate(w, "range.html", map[string]interface{}{
		"Hobbies": []string{
			"Gaming", "Reading", "Coding",
		},
	})
}
Dilanjutkan dengan membuat fungsi handler seperti dibawah ini.
	mux.HandleFunc("/template-action-range", TemplateActionRangeHandler)
Jalankan program dan akses browser maka akan menampilkan seperti dibawah ini.
Gaming
Reading
Coding
Operasi With
Kaadang kala kita sering membuat suatu nested struct yang mana jika menggunakan template kita bisa mengaksesnya dengan menggunakan .Value.NestedValue dalam template action With dengan mengubah scope dot menjadi onject yang ingin kita mau.
Contoh halnya seperti ini
- {{with .Value}}A1- {{ end }}berarti jika value tidak kosong, di- A1semua dot akan merefer ke value
- {{with .Value}}A1- {{ else }}A2- {{ end }}berarti sama halnya seperti sebelumnya namun jika value kosong maka- A2yang akan dieksekusi
Kita akan mencobanya dengan membuat file template-nya terlebih dahulu seperti ini
<html>
	<body>
			{{/* contoh komentar */}}
			Name : {{.Name}} <br>
			{{with .Address}}
			Address Street : {{.Street}}<br>
			Address City : {{.City}}<br>
			{{end}}
	</body>
</html>
Selanjutnya kita akan membuat fungsi handler baru untuk membaca file template diatas seperti ini.
func TemplateActionWithHandler(w http.ResponseWriter, r *http.Request) {
	t := template.Must(template.ParseFiles("./templates/address.html"))
	t.ExecuteTemplate(w, "address.html", map[string]interface{}{
		"Name": "Santekno",
		"Address": map[string]interface{}{
			"Street": "Jalan Padjadjaran",
			"City":   "Bogor",
		},
	})
}
Lalu jangan lupa juga untuk memanggil fungsi handler tersebut pada file main.go untuk inisialisasi endpoint-nya.
mux.HandleFunc("/template-action-with", TemplateActionWithHandler)
Build ulang dan coba jalankan kembali programnya.
go build && ./learn-golang-web
Setelah di buld dan dijalankan akan tampak tampilan pada halaman browser setelah diakses seperti dibawah ini
Name : Santekno
Address Street : Jalan Padjadjaran
Address City : Bogor
10 HTML Template Data
12 HTML Template Layout
Artikel Terhangat
111 Menambahkan Mutation ke Skema gqlgen
10 Oct 2025
108 Menangani Resolver Otomatis dan Manual
10 Oct 2025
106 Menulis Skema `.graphqls` untuk gqlgen
10 Oct 2025

111 Menambahkan Mutation ke Skema gqlgen

108 Menangani Resolver Otomatis dan Manual

