← Kembali ke kursus
Pelajaran kursus · Go
Pelajaran 46

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.