Sobes.tech
Назад к задачам
Junior — Senior
30

Оптимизируй производительность кода

Компании, где спрашивали:

КасперскийКасперский
Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Требуется устранить узкие места, влияющие на скорость работы программы, при этом менять внутреннюю реализацию логгера нельзя.

type Logger interface {
  Log(message string) error
  Close() error
}

type FileLogger struct{ file *os.File }

func NewFileLogger(path string) (*FileLogger, error) {
  fileHandle, err := os.Create(path)
  if err != nil {
    return nil, err
  }
  return &FileLogger{fileHandle}, nil
}

func (fl FileLogger) Log(message string) error {
  _, err := fl.file.WriteString(message + "\n")
  return err
}

func (fl FileLogger) Close() error {
  return fl.file.Close()
}

// ...

type SequentialLogger struct {
  inner Logger
}

func NewSequentialLogger(inner Logger) *SequentialLogger {
  return &SequentialLogger{inner}
}

func (sl *SequentialLogger) Log(message string) error {
  // TODO: добавить реализацию, сохраняющую порядок записи и не ухудшающую производительность
}