KHOÁ HỌC Phần 1 — Nền tảng Bản đơn giản — make it work trước

Bản đơn giản — make it work trước

🧠 Suy nghĩ

"Trước khi làm song song, phải chắc chắn 1 server kiểm tra được đã. Không thì debug loạn."

Đây là nguyên tắc "Make it work, then make it fast" — làm cho chạy đúng trước, tối ưu sau.

📐 Logic

  • Nhận vào 1 server và 1 notifier
  • Giả lập "ping" bằng time.Sleep
  • Đánh dấu server sống
  • In kết quả

💻 Code

func checkServerHealth(s *Server, notifier Notifier) {
    fmt.Printf("Đang kiểm tra %s...\n", s.Name)
    time.Sleep(1 * time.Second) // Giả lập gọi mạng
    s.SetStatus(true)
    fmt.Printf("✅ %s (%s) OK\n", s.Name, s.IP)
}

Và sửa main():

for _, srv := range servers {
    checkServerHealth(srv, alertSystem)
}

🔍 Giải thích

  • for _, srv := range servers → lặp qua slice. Dấu _ = "bỏ qua chỉ số".
  • srv có kiểu *Server (vì slice là []*Server) → truyền thẳng vào hàm.

⏱️ Kết quả khi chạy

Đang kiểm tra Web-Server-01...
✅ Web-Server-01 OK          (1s)
Đang kiểm tra Web-Server-02...
✅ Web-Server-02 OK          (2s)
Đang kiểm tra DB-Server...
✅ DB-Server OK              (3s)

Tổng 3 giây — quá chậm! Vì chạy tuần tự. Chương sau sẽ sửa bằng goroutine.

← Dựng khung main()