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ố".srvcó 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.