From 9b396b501f6e1f9c3d39faf3589cc243c32706a9 Mon Sep 17 00:00:00 2001 From: Inanc Gumus Date: Sat, 27 Jul 2019 18:15:38 +0300 Subject: [PATCH] move: log parser variadics to its own lecture --- .../log.txt | 0 .../log_err_missing.txt | 0 .../log_err_negative.txt | 0 .../log_err_str.txt | 0 .../main.go | 11 ++++------- .../parser.go | 17 ++++++++++++++++- 6 files changed, 20 insertions(+), 8 deletions(-) rename 27-functions-advanced/{01-variadic-funcs/log-parser-to-variadic => 07-log-parser}/log.txt (100%) rename 27-functions-advanced/{01-variadic-funcs/log-parser-to-variadic => 07-log-parser}/log_err_missing.txt (100%) rename 27-functions-advanced/{01-variadic-funcs/log-parser-to-variadic => 07-log-parser}/log_err_negative.txt (100%) rename 27-functions-advanced/{01-variadic-funcs/log-parser-to-variadic => 07-log-parser}/log_err_str.txt (100%) rename 27-functions-advanced/{01-variadic-funcs/log-parser-to-variadic => 07-log-parser}/main.go (81%) rename 27-functions-advanced/{01-variadic-funcs/log-parser-to-variadic => 07-log-parser}/parser.go (83%) diff --git a/27-functions-advanced/01-variadic-funcs/log-parser-to-variadic/log.txt b/27-functions-advanced/07-log-parser/log.txt similarity index 100% rename from 27-functions-advanced/01-variadic-funcs/log-parser-to-variadic/log.txt rename to 27-functions-advanced/07-log-parser/log.txt diff --git a/27-functions-advanced/01-variadic-funcs/log-parser-to-variadic/log_err_missing.txt b/27-functions-advanced/07-log-parser/log_err_missing.txt similarity index 100% rename from 27-functions-advanced/01-variadic-funcs/log-parser-to-variadic/log_err_missing.txt rename to 27-functions-advanced/07-log-parser/log_err_missing.txt diff --git a/27-functions-advanced/01-variadic-funcs/log-parser-to-variadic/log_err_negative.txt b/27-functions-advanced/07-log-parser/log_err_negative.txt similarity index 100% rename from 27-functions-advanced/01-variadic-funcs/log-parser-to-variadic/log_err_negative.txt rename to 27-functions-advanced/07-log-parser/log_err_negative.txt diff --git a/27-functions-advanced/01-variadic-funcs/log-parser-to-variadic/log_err_str.txt b/27-functions-advanced/07-log-parser/log_err_str.txt similarity index 100% rename from 27-functions-advanced/01-variadic-funcs/log-parser-to-variadic/log_err_str.txt rename to 27-functions-advanced/07-log-parser/log_err_str.txt diff --git a/27-functions-advanced/01-variadic-funcs/log-parser-to-variadic/main.go b/27-functions-advanced/07-log-parser/main.go similarity index 81% rename from 27-functions-advanced/01-variadic-funcs/log-parser-to-variadic/main.go rename to 27-functions-advanced/07-log-parser/main.go index a5a86d6..70e06e3 100644 --- a/27-functions-advanced/01-variadic-funcs/log-parser-to-variadic/main.go +++ b/27-functions-advanced/07-log-parser/main.go @@ -11,7 +11,6 @@ import ( "bufio" "fmt" "os" - "sort" "strings" ) @@ -30,15 +29,13 @@ func main() { // summarize summarizes and prints the parsing result func summarize(p *parser) { - sort.Strings(p.domains) - fmt.Printf("%-30s %10s\n", "DOMAIN", "VISITS") fmt.Println(strings.Repeat("-", 45)) - for _, domain := range p.domains { - fmt.Printf("%-30s %10d\n", domain, p.sum[domain].visits) - } - fmt.Printf("\n%-30s %10d\n", "TOTAL", p.total) + loop(p, func(r result) { + fmt.Printf("%-30s %10d\n", r.domain, r.visits) + }) + fmt.Printf("\n%-30s %10d\n", "TOTAL", totalVisits(p)) } // dumpErrs simplifies handling multiple errors diff --git a/27-functions-advanced/01-variadic-funcs/log-parser-to-variadic/parser.go b/27-functions-advanced/07-log-parser/parser.go similarity index 83% rename from 27-functions-advanced/01-variadic-funcs/log-parser-to-variadic/parser.go rename to 27-functions-advanced/07-log-parser/parser.go index 3c27940..a84e99c 100644 --- a/27-functions-advanced/01-variadic-funcs/log-parser-to-variadic/parser.go +++ b/27-functions-advanced/07-log-parser/parser.go @@ -9,6 +9,7 @@ package main import ( "fmt" + "sort" "strconv" "strings" ) @@ -59,7 +60,7 @@ func parse(p *parser, line string) (r result) { return } -// update updates the errors for the given parsing result +// update updates all the parsing results using the given parsing result func update(p *parser, r result) { if p.lerr != nil { return @@ -84,3 +85,17 @@ func update(p *parser, r result) { func err(p *parser) error { return p.lerr } + +// loop allows a func to access all the copies of parsing results +func loop(p *parser, feed func(result)) { + sort.Strings(p.domains) + + for _, domain := range p.domains { + feed(p.sum[domain]) + } +} + +// total returns the total visits +func totalVisits(p *parser) int { + return p.total +}