Go Academy · Pelajaran

Penghentian yang Anggun

Menangani sinyal OS dan mengosongkan koneksi

Pelajaran 4 dari 413 langkah

Penghentian yang Anggun adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.

Mengapa Shutdown yang anggun?

Memanggil os.Exit atau sekadar menghentikan peladen akan membuang semua permintaan yang sedang berlangsung. Shutdown yang anggun menunggu permintaan aktif selesai sebelum keluar.

http.Server.Shutdown

srv.Shutdown(ctx) berhenti menerima koneksi baru, menunggu permintaan aktif selesai, lalu mengembalikan hasil. Teruskan konteks dengan tenggat waktu untuk membatasi waktu tunggu.

ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
srv.Shutdown(ctx)

Penanganan sinyal

Dengarkan SIGINT/SIGTERM dalam goroutine dan panggil Shutdown saat sinyal diterima:

quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
log.Println("shutting down...")
srv.Shutdown(ctx)

Pola lengkap Shutdown yang anggun

Mulai peladen dalam goroutine; tunggu pada kanal sinyal; lalu lakukan penghentian:

go func() {
    if err := srv.ListenAndServe(); err != http.ErrServerClosed {
        log.Fatal(err)
    }
}()

quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
srv.Shutdown(ctx)

http.ErrServerClosed

Setelah Shutdown dipanggil, ListenAndServe mengembalikan http.ErrServerClosed. Perlakukan ini sebagai keluar secara normal, bukan galat.

Pengurasan koneksi

Shutdown menunggu semua koneksi yang diambil alih dan koneksi WebSocket aktif hanya jika penangan itu sendiri mematuhi pembatalan konteks. Penangan jajak panjang atau streaming harus memeriksa r.Context().Done().

Batas waktu Shutdown

Tetapkan batas waktu penghentian yang wajar (10–30 detik). Jika permintaan masih berjalan setelah tenggat, Shutdown mengembalikan context.DeadlineExceeded dan koneksi yang tersisa ditutup secara paksa.

Pembersihan saat Shutdown

Setelah Shutdown selesai, tutup kumpulan koneksi basis data, kosongkan buffer catatan, dan lepaskan sumber daya lain secara berurutan. Gunakan defer atau pengurutan eksplisit.

srv.Shutdown(ctx)
db.Close()
logger.Sync()

Server.Close dibandingkan Server.Shutdown

srv.Close() segera menutup semua koneksi tanpa menunggu. Gunakan ini hanya ketika penghentian paksa dapat diterima, misalnya dalam pengujian.

Pemeriksaan kesiapan Kubernetes

Selama penghentian, perbarui pemeriksaan kesiapan agar mengembalikan 503 sebelum memanggil Shutdown. Ini memberi sinyal kepada penyeimbang beban untuk berhenti merutekan permintaan baru ke pod tersebut.

Beberapa peladen

Jika menjalankan beberapa peladen (HTTP + gRPC + metrik), hentikan masing-masing secara bersamaan dengan goroutine dan gunakan WaitGroup untuk menunggu semuanya selesai dikuras.

Pemeriksaan Singkat

Apa yang dilakukan http.Server.Shutdown?

Rangkuman: Shutdown yang Anggun

Poin penting:

  • srv.Shutdown(ctx) menghentikan koneksi baru dan menunggu koneksi aktif selesai
  • Dengarkan SIGINT/SIGTERM dengan signal.Notify
  • ListenAndServe mengembalikan http.ErrServerClosed saat Shutdown — bukan galat
  • Tetapkan tenggat Shutdown agar tidak menunggu selamanya
Gratis untuk memulai

Belajar Go dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
51
Pelajaran
203

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Penghentian yang Anggun” gratis?

Ya — teks lengkap “Penghentian yang Anggun” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Penghentian yang Anggun”?

Menangani sinyal OS dan mengosongkan koneksi Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Go Academy?

Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Penghentian yang Anggun” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Membuat Server HTTP
  2. Perutean dan Parameter Path
  3. Pola Middleware
  4. Penghentian yang Anggun
← Kembali ke Go Academy