Skip to content

Instantly share code, notes, and snippets.

@nickmccurdy
Created February 25, 2014 06:09
Show Gist options
  • Save nickmccurdy/9203620 to your computer and use it in GitHub Desktop.
Save nickmccurdy/9203620 to your computer and use it in GitHub Desktop.
A simple grep implementation in Go
package main
import(
"bufio"
"fmt"
"log"
"os"
"regexp"
)
func handleLine(line string) {
matched, err := regexp.MatchString(os.Args[1], line)
if err != nil {
log.Fatal(err)
} else if matched {
fmt.Println(line)
}
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
handleLine(scanner.Text())
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
}
Copy link

ghost commented Oct 22, 2018

oof, this is pretty painful, you match and check for err on every Scan(), what you should do is

r, err := regexp.Compile(os.Args[1])

and then every Scan()

if r.MatchString(scanner.Text()) {fmt.Println(scanner.Text())}

no need for handleLine() function at all

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment