net/http/httptrace даёт хуки внутрь исходящего HTTP-запроса — туда, куда снаружи не заглянуть:• DNS lookup: начало и конец
• TCP connect
• TLS handshake
• Момент получения первого байта ответа
• Факт переиспользования соединения
Вся магия через контекст: трейс кладётся в ctx, транспорт сам его достаёт. Никаких интерфейсов, никакого middleware.
Что можно собрать за пару строк:
1. curl-like тайминги
fmt.Printf("DNS: %v\n", dnsDone.Sub(dnsStart))
fmt.Printf("TLS: %v\n", tlsDone.Sub(tlsStart))
fmt.Printf("TTFB: %v\n", firstByte.Sub(gotConn))2. Логирующий RoundTripper
Оборачиваете транспорт, в каждом запросе автоматически пишутся тайминги. Одна инициализация и всё.
Лайфхак: GotConnInfo.Reused = false на каждом запросе к одному хосту = где-то не закрывается тело ответа.
➡️ Пакет
📍 Навигация: Вакансии • Задачи • Собесы • Канал в Max
🐸 Библиотека Go-разработчика
#GoToProduction
