Каждое сетевое соединение, открытый файл - файловый дескриптор. Лимит процесса - ulimit -n. В Go при утечке (не закрытые соединения, не закрытые файлы) дескрипторы заканчиваются. Всегда закрывать: defer conn.Close(), defer file.Close(), после использования response body: defer resp.Body.Close(). При пуле соединений контролировать размер пула и закрытие при shutdown.
f, err := os.Open(path)
if err != nil { return err }
defer f.Close()