Sobes.tech
Junior — Senior

Optimize code performance

livecode

Task condition

It is necessary to eliminate bottlenecks affecting the program's speed, while not changing the internal implementation of the logger.

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: add implementation that preserves the order of entries and does not degrade performance
}