Время читается единой точкой, а конец потока узнаётся не по тексту

- заведён internal/clock: Now даёт метку в UTC, Start — начало измерения
  длительности с монотонными часами; девять мест рабочего кода и запрос захвата
  переведены на него, долг «время time.Now() по месту» закрыт
- клиент SpeechKit узнавал конец потока сравнением err.Error() == "EOF": отказ
  с тем же текстом вернул бы усечённую расшифровку как готовую, теперь
  errors.Is(err, io.EOF)
- починены находки новых линтеров: две опечатки, два slog.DiscardHandler,
  четыре неэкранированные подстановки в docker/entrypoint.sh
This commit is contained in:
av
2026-08-13 09:01:36 +03:00
parent 6c7f006e75
commit 1d243ad2f6
9 changed files with 69 additions and 20 deletions
@@ -4,6 +4,7 @@ import (
"context"
"errors"
"fmt"
"io"
"strings"
"google.golang.org/grpc"
@@ -157,7 +158,10 @@ func (s *speechKitService) getRecognitionText(operationID string) (string, error
for {
resp, err := stream.Recv()
if err != nil {
if err.Error() == "EOF" {
// Конец потока библиотека отдаёт ровно `io.EOF`. Прежде он узнавался
// сравнением текста сообщения: так же выглядел бы и настоящий отказ
// с текстом «EOF», и распознавание молча вернуло бы половину текста.
if errors.Is(err, io.EOF) {
break
}
return "", fmt.Errorf("failed to receive recognition response: %w", err)