Учитывая цель отправки запросов на сервер после запуска сервера, приложение должно выполнить прослушивание и обслуживать отдельно.
Подход отправки запросов после запуска ListenAndServe
в обычной программе не гарантирует, что сервер прослушивает, когда запросы отправляются. Основная программа может продолжить выполнение перед отправкой, пока она вообще не будет выполнена.
tcpKeepAliveListener
короткий. Если вам нужна эта функциональность, скопируйте код в ваше приложение.
Вот код для использования:
ln, err := net.Listen("tcp", addr)
if err != nil {
log.Fatal(err)
}
go func() {
log.Fatal(srv.Serve(tcpKeepAliveListener{ln.(*net.TCPListener)}))
}()
// The Serve loop is not guaranteed to be running at this point, but
// the listening socket is open and requests to the socket will queue.
... send requests here