การกำหนดเวลาตามเวลา
ทำงานเป็นช่วงเวลา
การกำหนดเวลาตามเวลา เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
การทำงานตามกำหนดเวลา
หลายระบบจำเป็นต้องมีงานที่ทำเป็นระยะ เช่น ล้างไฟล์ชั่วคราวทุกคืน ส่งอีเมลสรุปทุกเช้า หรือเรียกดู API ทุกนาที บทเรียนนี้จะแนะนำการจัดตารางเวลาตามเวลาใน Go โดยใช้ไลบรารีมาตรฐาน
แพ็กเกจ time
แพ็กเกจ time ของ Go เป็นพื้นฐาน เครื่องมือสำคัญมีดังนี้:
time.Sleepหยุดกอรูทีนชั่วคราวtime.Afterส่งคืนช่องสัญญาณที่ทำงานหนึ่งครั้งtime.Tickerทำงานซ้ำเป็นระยะtime.Timerทำงานหนึ่งครั้งหลังจากหน่วงเวลา
ลูปแบบง่าย
ตัวจัดตารางเวลาที่ง่ายที่สุดคือ ทำงาน หยุดรอ แล้วทำซ้ำ
package main
import (
"fmt"
"time"
)
func main() {
for i := 0; i < 3; i++ {
fmt.Println("tick", i)
time.Sleep(10 * time.Millisecond)
}
}เหตุผลที่ Sleep คลาดเคลื่อน
ลูปที่ใช้การหยุดรอจะคลาดเคลื่อน: หากงานใช้เวลา 200 มิลลิวินาทีและคุณหยุดรอ 1 วินาที ช่วงเวลาจริงจะเป็น 1.2 วินาที และความคลาดเคลื่อนจะสะสม หากต้องการช่วงเวลาที่แม่นยำ ให้ใช้ Ticker ซึ่งจะกล่าวถึงในบทเรียนถัดไป
time.After สำหรับการหน่วงเวลาครั้งเดียว
time.After(d) ส่งคืนช่องสัญญาณที่รับข้อมูลหนึ่งครั้งหลังจากระยะเวลา d มีประโยชน์ใน select สำหรับกำหนดเวลาสูงสุด
select {
case <-time.After(2 * time.Second):
fmt.Println("2s elapsed")
}time.Timer
Timer ทำงานหนึ่งครั้งและสามารถหยุดหรือเริ่มใหม่ได้ ต่างจาก time.After ที่ไม่สามารถยกเลิกได้
t := time.NewTimer(5 * time.Second)
defer t.Stop()
<-t.C
fmt.Println("fired")การจัดตารางเวลาเฉพาะ
หากต้องการทำงานในเวลา เช่น ตีสาม ให้คำนวณระยะเวลาจนถึงเวลานั้น แล้วหยุดรอหรือตั้งตัวจับเวลาตามระยะดังกล่าว จากนั้นจัดตารางใหม่สำหรับวันถัดไป
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))ระยะเวลามีประเภทข้อมูล
time.Duration เป็นค่า int64 ที่แสดงจำนวนนาโนวินาที พร้อมค่าคงที่ที่ใช้งานสะดวก เช่น time.Second, time.Minute และ time.Hour ให้คูณค่าเหล่านี้เพื่อเขียนช่วงเวลาให้อ่านง่าย
every := 30 * time.Minute
fmt.Println(every)นาฬิกาแบบ Monotonic กับนาฬิกาจริง
time.Now ของ Go มีค่าการอ่านแบบ monotonic ซึ่งใช้วัดเวลาที่ผ่านไปและไม่ถูกรบกวนจากการปรับนาฬิกา ให้ใช้ time.Since สำหรับหาระยะเวลา แทนการลบค่าจากนาฬิกาจริง
start := time.Now()
// ... work ...
fmt.Println("took", time.Since(start))เมื่อใดควรเลือกใช้ไลบรารี
สำหรับตารางเวลาที่ซับซ้อน เช่น "ทุกวันธรรมดาเวลา 9:15" การคำนวณเวลาเองมีโอกาสเกิดข้อผิดพลาดได้ง่าย ไลบรารี robfig/cron ซึ่งจะกล่าวถึงถัดไป สามารถแยกวิเคราะห์นิพจน์ cron ให้คุณได้
ตัวอย่างที่รันได้: คำนวณการทำงานครั้งถัดไป
โปรแกรมนี้ทำงานได้ในตัวและคำนวณระยะเวลาจนถึงจุดเปลี่ยนนาทีถัดไป โดยใช้เฉพาะแพ็กเกจ 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))
}ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจเรื่องการจัดตารางเวลาตามเวลา
สรุปทบทวน
คุณได้เรียนรู้พื้นฐานการจัดตารางเวลาตามเวลาดังนี้:
- แพ็กเกจ
timeมี Sleep, After, Timer และตัวนับจังหวะ - ลูปที่ใช้ Sleep จะคลาดเคลื่อน ส่วนตัวนับจังหวะจะรักษาตารางเวลา
- คำนวณระยะเวลาจนถึงเวลาเป้าหมายด้วย
time.Until - ใช้
time.Sinceและนาฬิกาแบบ monotonic เพื่อวัดเวลาที่ผ่านไป
คำถามที่พบบ่อย
บทเรียน “การกำหนดเวลาตามเวลา” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การกำหนดเวลาตามเวลา” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดเวลาตามเวลา”
ทำงานเป็นช่วงเวลา คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “การกำหนดเวลาตามเวลา” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม
ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การกำหนดเวลาตามเวลา
- ไลบรารี robfig/cron
- ตัวนับเวลาสำหรับช่วงเวลา
- การปิดงานอย่างราบรื่น