Web server
Bangun server HTTP murni standard library.
Pahami konsepnya
Paket net/http membangun server web tanpa framework apa pun. Resep minimumnya: daftarkan handler lewat http.HandleFunc(rute, fungsi), lalu jalankan http.ListenAndServe(":8080", nil). Setiap permintaan ke rute diarahkan ke fungsinya.
Handler menerima dua nilai: w http.ResponseWriter untuk menulis respons (Fprintln(w, ...) mencetak ke browser), dan r *http.Request berisi segalanya tentang permintaan — metode, header, query, hingga body. Rute "/" menangkap semua yang tidak terdaftar; rute yang lebih panjang dicocokkan persis.
Buka localhost:8080 di browser atau curl localhost:8080 untuk melihat hasilnya. Kesalahan ListenAndServe dikembalikan saat server berhenti — biasanya ditutup dengan log.Fatal. Dari kerangka inilah seluruh pelajaran web berikutnya tumbuh: JSON, form, hingga middleware.
Coba contoh kode
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Halo dari server Go!")
})
http.HandleFunc("/tentang", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Halaman tentang")
})
log.Fatal(http.ListenAndServe(":8080", nil))
}Dua rute terdaftar: "/" menjawab semua alamat lain, "/tentang" khusus. Fprintln ke w menulis langsung ke browser pemanggil. Jalankan lalu buka localhost:8080 dan localhost:8080/tentang — perhatikan header Content-Type otomatis terpasang sebagai text/plain; pelajaran JSON mengubahnya.
Membaca query parameter
http.HandleFunc("/sapa", func(w http.ResponseWriter, r *http.Request) {
nama := r.URL.Query().Get("nama")
if nama == "" {
nama = "tamu"
}
fmt.Fprintf(w, "Halo, %s!", nama)
})Query string (localhost:8080/sapa?nama=Andi) dibaca lewat r.URL.Query().Get — Get mengembalikan string kosong bila parameternya absen, jadi nilai cadangan mudah dipasang. Inilah interaksi pertama request → logika → response.