interfaces: refactor
This commit is contained in:
		| @@ -0,0 +1,53 @@ | ||||
| // For more tutorials: https://blog.learngoprogramming.com | ||||
| // | ||||
| // Copyright © 2018 Inanc Gumus | ||||
| // Learn Go Programming Course | ||||
| // License: https://creativecommons.org/licenses/by-nc-sa/4.0/ | ||||
| // | ||||
|  | ||||
| package main | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| const fieldsLength = 4 | ||||
|  | ||||
| // result stores the parsed result for a domain | ||||
| type result struct { | ||||
| 	domain, page    string | ||||
| 	visits, uniques int | ||||
| 	// add more metrics if needed | ||||
| } | ||||
|  | ||||
| // parseResult from a log line | ||||
| func parseResult(line string) (r result, err error) { | ||||
| 	fields := strings.Fields(line) | ||||
| 	if len(fields) != fieldsLength { | ||||
| 		return r, fmt.Errorf("wrong input: %v", fields) | ||||
| 	} | ||||
|  | ||||
| 	r.domain = fields[0] | ||||
| 	r.page = fields[1] | ||||
|  | ||||
| 	r.visits, err = strconv.Atoi(fields[2]) | ||||
| 	if err != nil || r.visits < 0 { | ||||
| 		return r, fmt.Errorf("wrong input: %q", fields[2]) | ||||
| 	} | ||||
|  | ||||
| 	r.uniques, err = strconv.Atoi(fields[3]) | ||||
| 	if err != nil || r.uniques < 0 { | ||||
| 		return r, fmt.Errorf("wrong input: %q", fields[3]) | ||||
| 	} | ||||
|  | ||||
| 	return r, nil | ||||
| } | ||||
|  | ||||
| // addResult to another one | ||||
| func addResult(r, other result) result { | ||||
| 	r.visits += other.visits | ||||
| 	r.uniques += other.uniques | ||||
| 	return r | ||||
| } | ||||
		Reference in New Issue
	
	Block a user