Konfigurasi & Menjalankan Server dengan Aman

Membaca port dari environment variable, memasang timeout pada http.Server, dan memahami graceful shutdown.

Part 16 dari 17 ± 30 menit Gratis

Dari ListenAndServe ke http.Server

Di bab 2 kita memakai http.ListenAndServe(":8080", mux). Itu praktis, tetapi tidak punya batas waktu: client yang lambat atau nakal bisa menahan koneksi selamanya. Untuk server yang serius, buat http.Server sendiri:

srv := &http.Server{
    Addr:         ":8080",
    Handler:      handler,
    ReadTimeout:  5 * time.Second,    // batas membaca request
    WriteTimeout: 10 * time.Second,   // batas menulis response
}
log.Fatal(srv.ListenAndServe())

5 * time.Second adalah tipe time.Duration. Hasil cetaknya berbentuk 5s.

Konfigurasi lewat environment variable

Port, kunci rahasia, dan alamat database tidak boleh ditulis keras di kode, karena berbeda di tiap lingkungan (laptop, server, cloud). Baca dari environment variable:

port := os.Getenv("PORT")      // "" bila tidak diatur
if port == "" {
    port = "8080"              // nilai bawaan
}

Menjalankannya: PORT=9000 go run .

Graceful shutdown (bacaan lanjutan)

Saat server dimatikan (Ctrl+C atau deploy ulang), request yang sedang diproses sebaiknya diselesaikan dulu. Polanya:

ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
defer stop()

go func() { srv.ListenAndServe() }()

<-ctx.Done()                                       // tunggu Ctrl+C
shutdownCtx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
srv.Shutdown(shutdownCtx)                          // selesaikan request berjalan

Bagian ini hanya untuk dibaca dan dicoba di komputermu; latihan di bawah fokus pada konfigurasi dan timeout.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X