Sobes.tech
Back to tasks
Junior — Senior
29

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

Companies where asked:

КасперскийКасперский
Get help with live coding in real time with Sobes Copilot
Task condition

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

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: добавить реализацию, сохраняющую порядок записи и не ухудшающую производительность
}