package parser import ( "bufio" "errors" "fmt" "os" "os/exec" ) func ParseFile(path string) (Parser, error) { if path == "" { return Parser{}, errors.New("path cannot be empty") } if _, err := os.Stat(path); os.IsNotExist(err) { return Parser{}, fmt.Errorf("file does not exist: %s", path) } cmd := exec.Command("tail", "-F", "-n", "10", path) stdout, err := cmd.StdoutPipe() if err != nil { return Parser{}, fmt.Errorf("stdout pipe error: %w", err) } if err := cmd.Start(); err != nil { return Parser{}, fmt.Errorf("failed to start tail parser: %w", err) } p := Parser{ parser: bufio.NewScanner(stdout), ch: make(chan string, 100), cmd: cmd, file: &path, } return p, nil }