Ответ
Poll в Go — это метод проверки состояния ресурса (например, файлового дескриптора, канала или сокета) в цикле, пока он не станет доступным для чтения/записи или не произойдёт таймаут.
Пример с net пакетом:
conn, err := net.Dial("tcp", "example.com:80")
if err != nil {
log.Fatal(err)
}
defer conn.Close()
buf := make([]byte, 1024)
for {
n, err := conn.Read(buf) // Polling чтения
if err != nil {
break
}
fmt.Println(string(buf[:n]))
}
Нюансы:
- Polling может нагружать CPU, если не добавить задержку (например,
time.Sleep). - В Go предпочтительнее использовать блокирующие операции или
selectс каналами/таймаутами. - Для эффективного ожидания событий лучше применять
epoll(Linux) илиkqueue(BSD) через пакеты вродеgolang.org/x/sys.