Go menyediakan package net/http
, berisi berbagai macam fitur untuk keperluan pembuatan aplikasi berbasis web. Termasuk di dalamnya web server, routing, templating, dan lainnya.
Go memiliki web server sendiri, dan web server tersebut berada di dalam Go, tidak seperti bahasa lain yang servernya terpisah dan perlu diinstal sendiri (seperti PHP yang memerlukan Apache, .NET yang memerlukan IIS).
Pada chapter ini kita akan belajar cara pembuatan aplikasi web sederhana dan pemanfaatan template untuk mendesain view.
Package net/http
memiliki banyak sekali fungsi yang bisa dimanfaatkan. Di bagian ini kita akan mempelajari beberapa fungsi penting seperti routing dan start server.
Program di bawah ini merupakan contoh sederhana untuk memunculkan text di web ketika url tertentu diakses.
package main
import "fmt"
import "net/http"
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "apa kabar!")
}
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "halo!")
})
http.HandleFunc("/index", index)
fmt.Println("starting web server at http://localhost:8080/")
http.ListenAndServe(":8080", nil)
}
Jalankan program tersebut.
Jika muncul dialog Do you want the application “bab48” to accept incoming network connections? atau sejenis, pilih allow. Setelah itu, buka url http://localhost/ dan http://localhost/index lewat browser.
Fungsi http.HandleFunc()
digunakan untuk routing aplikasi web. Maksud dari routing adalah penentuan aksi ketika url tertentu diakses oleh user.
Pada kode di atas 2 rute didaftarkan, yaitu /
dan /index
. Aksi dari rute /
adalah menampilkan text "halo"
di halaman website. Sedangkan /index
menampilkan text "apa kabar!"
.
Fungsi http.HandleFunc()
memiliki 2 buah parameter yang harus diisi. Parameter pertama adalah rute yang diinginkan. Parameter kedua adalah callback atau aksi ketika rute tersebut diakses. Callback tersebut bertipe fungsi func(w http.ResponseWriter, r *http.Request)
.
Pada pendaftaran rute /index
, callback-nya adalah fungsi index()
, hal seperti ini diperbolehkan asalkan tipe dari fungsi tersebut sesuai.
Fungsi http.listenAndServe()
digunakan untuk menghidupkan server sekaligus menjalankan aplikasi menggunakan server tersebut. Di Go, 1 web aplikasi adalah 1 buah server berbeda.
Pada contoh di atas, server dijalankan pada port 8080
.
Perlu diingat, setiap ada perubahan pada file .go
, go run
harus dipanggil lagi.
Untuk menghentikan web server, tekan CTRL+C pada terminal atau CMD, di mana pengeksekusian aplikasi berlangsung.
Template engine memberikan kemudahan dalam mendesain tampilan view aplikasi website. Dan kabar baiknya Go menyediakan engine template sendiri, dengan banyak fitur yang tersedia di dalamnya.
Di sini kita akan belajar contoh sederhana penggunaan template untuk menampilkan data. Pertama siapkan dahulu template-nya. Buat file template.html
lalu isi dengan kode berikut.
<html>
<head>
<title>Go learn net/http</title>
</head>
<body>
<p>Hello {{.Name}} !</p>
<p>{{.Message}}</p>
</body>
</html>
Kode {{.Name}}
artinya memunculkan isi data property Name
yang dikirim dari router. Kode tersebut nantinya di-replace dengan isi variabel Name
.
Selanjutnya ubah isi file .go
dengan kode berikut.
package main
import "fmt"
import "html/template"
import "net/http"
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
var data = map[string]string{
"Name": "john wick",
"Message": "have a nice day",
}
var t, err = template.ParseFiles("template.html")
if err != nil {
fmt.Println(err.Error())
return
}
t.Execute(w, data)
})
fmt.Println("starting web server at http://localhost:8080/")
http.ListenAndServe(":8080", nil)
}
Jalankan, lalu buka http://localhost:8080/, maka data Nama
dan Message
akan muncul di view.
Fungsi template.ParseFiles()
digunakan untuk parsing template, mengembalikan 2 data yaitu instance template-nya dan error (jika ada). Pemanggilan method Execute()
akan membuat hasil parsing template ditampilkan ke layar web browser.
Pada kode di atas, variabel data
disisipkan sebagai parameter ke-2 method Execute()
. Isi dari variabel tersebut bisa diakses di-view dengan menggunakan notasi {{.NAMA_PROPERTY}}
(nama variabel sendiri tidak perlu dituliskan, langsung nama property di dalamnya).
Pada contoh di atas, statement di view {{.Name}}
akan menampilkan isi dari data.Name
.
Sampai chapter ini yang kita pelajari adalah dasar-dasar pemrograman Go, dibahas per topik adalah per chapter. Nantinya jika sudah masuk B.1. Golang Web App: Hello World hingga seterusnya akan lebih banyak membahas mengenai pemrograman web, jadi sabar dulu. Mari kita selesaikan dulu yang fundamental sebelum masuk ke web development.