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
}