Penjadwalan Berbasis Waktu
Jalankan pekerjaan berkala
Penjadwalan Berbasis Waktu adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.
Menjalankan Pekerjaan Sesuai Jadwal
Banyak sistem memerlukan pekerjaan berkala: membersihkan berkas sementara setiap malam, mengirim email ringkasan setiap pagi, atau melakukan polling API setiap menit. Pelajaran ini memperkenalkan penjadwalan berbasis waktu di Go menggunakan pustaka standar.
Paket time
Paket time Go adalah fondasinya. Alat-alat utama:
time.Sleepmenjeda goroutinetime.Aftermengembalikan kanal yang aktif satu kalitime.Tickeraktif berulang kalitime.Timeraktif satu kali setelah penundaan
Perulangan Naif
Penjadwal paling sederhana: lakukan pekerjaan, tidur, lalu ulangi.
package main
import (
"fmt"
"time"
)
func main() {
for i := 0; i < 3; i++ {
fmt.Println("tick", i)
time.Sleep(10 * time.Millisecond)
}
}Mengapa Sleep Bergeser
Perulangan sleep bergeser: jika pekerjaan memerlukan waktu 200 md dan Anda tidur selama 1 dtk, interval sebenarnya adalah 1,2 dtk dan pergeseran ini terakumulasi. Untuk interval yang akurat, gunakan Ticker, yang dibahas dalam pelajaran berikutnya.
time.After untuk Penundaan Sekali Jalan
time.After(d) mengembalikan kanal yang menerima satu nilai setelah durasi d. Ini berguna dalam select untuk batas waktu.
select {
case <-time.After(2 * time.Second):
fmt.Println("2s elapsed")
}time.Timer
Timer aktif satu kali dan dapat dihentikan atau diatur ulang, berbeda dari time.After yang tidak dapat Anda batalkan.
t := time.NewTimer(5 * time.Second)
defer t.Stop()
<-t.C
fmt.Println("fired")Menjadwalkan pada Waktu Tertentu
Untuk menjalankan pekerjaan, misalnya, pada pukul 3 AM, hitung durasi hingga saat tersebut lalu gunakan sleep atau timer selama durasi itu, kemudian jadwalkan ulang untuk hari berikutnya.
now := time.Now()
next := time.Date(now.Year(), now.Month(), now.Day(), 3, 0, 0, 0, now.Location())
if next.Before(now) {
next = next.Add(24 * time.Hour)
}
fmt.Println("sleep for", time.Until(next))Durasi Memiliki Tipe
time.Duration adalah int64 yang menyatakan nanodetik, dengan konstanta praktis: time.Second, time.Minute, time.Hour. Kalikan konstanta tersebut untuk mendapatkan interval yang mudah dibaca.
every := 30 * time.Minute
fmt.Println(every)Jam Monotonik vs Jam Dinding
time.Now Go menyertakan pembacaan monotonik yang digunakan untuk mengukur waktu yang berlalu dan kebal terhadap penyesuaian jam. Gunakan time.Since untuk durasi, bukan pengurangan waktu pada jam dinding.
start := time.Now()
// ... work ...
fmt.Println("took", time.Since(start))Kapan Menggunakan Pustaka
Untuk jadwal yang rumit ("setiap hari kerja pukul 9:15"), menghitung waktu secara manual rentan terhadap kesalahan. Pustaka robfig/cron, yang dibahas berikutnya, menguraikan ekspresi cron untuk Anda.
Dapat Dijalankan: Menghitung Eksekusi Berikutnya
Program mandiri ini menghitung waktu hingga batas menit berikutnya hanya menggunakan paket time.
package main
import (
"fmt"
"time"
)
func main() {
now := time.Date(2026, 1, 1, 10, 30, 45, 0, time.UTC)
nextMinute := now.Truncate(time.Minute).Add(time.Minute)
fmt.Println("now:", now.Format("15:04:05"))
fmt.Println("next run:", nextMinute.Format("15:04:05"))
fmt.Println("wait:", nextMinute.Sub(now))
}Pemeriksaan Singkat
Uji pemahaman Anda tentang penjadwalan berbasis waktu.
Rangkuman
Anda telah mempelajari dasar-dasar penjadwalan berbasis waktu:
- Paket
timemenyediakan Sleep, After, Timer, Ticker - Perulangan Sleep bergeser; ticker tetap sesuai jadwal
- Hitung durasi hingga waktu target dengan
time.Until - Gunakan
time.Sincedan jam monotonik untuk mengukur waktu yang telah berlalu
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Penjadwalan Berbasis Waktu” gratis?
Ya — teks lengkap “Penjadwalan Berbasis Waktu” 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 “Penjadwalan Berbasis Waktu”?
Jalankan pekerjaan berkala 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 1 dari 4.
Berapa lama pelajaran “Penjadwalan Berbasis Waktu” 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
- Penjadwalan Berbasis Waktu
- Pustaka robfig/cron
- Ticker untuk Interval
- Penghentian Job yang Mulus