تمرين إعادة البناء
Mini Grep
أعد كتابة برنامج Go يبحث في ملف باستخدام regexp.
go
~24 دقيقة
متوسط
أعد بناء الكود
Rebuild
هذا هو الكود. اكتبه بنفسك.
الكود المرجعي
package main
import (
"bufio"
"fmt"
"os"
"regexp"
"strings"
)
func grep(pattern string, text string) ([]string, error) {
re, err := regexp.Compile(pattern)
if err != nil {
return nil, err
}
var matches []string
scanner := bufio.NewScanner(strings.NewReader(text))
for lineNumber := 1; scanner.Scan(); lineNumber++ {
line := scanner.Text()
if re.MatchString(line) {
matches = append(matches, fmt.Sprintf("%d:%s", lineNumber, line))
}
}
return matches, scanner.Err()
}
func main() {
text := `Go builds simple tools.
Typing code teaches patterns.
Great tools start small.`
pattern := "tools?"
if len(os.Args) > 1 {
pattern = os.Args[1]
}
matches, err := grep(pattern, text)
if err != nil {
fmt.Println("error:", err)
return
}
for _, match := range matches {
fmt.Println(match)
}
}اكتب هنا