Екатерина обнови решението на 25.10.2015 16:24 (преди над 2 години)
+package main
+
+import (
+ "fmt"
+ "regexp"
+)
+
+func ExtractColumn(logContents string, column uint8) string {
+ var (
+ date = "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}"
+ ip = "\\d+\\.\\d+\\.\\d+\\.\\d+"
+ text = ".*"
+ re = regexp.MustCompile(fmt.Sprintf("(%s) (%s) (%s)", date, ip, text))
+ )
+
+ var result string
+ parsed := re.FindAllStringSubmatch(logContents, -1)
+ for _, p := range parsed {
+ result += p[column+1] + "\n"
+ }
+
+ return result
+}
Изглежда добре, имам няколко стилистични забележки:
- нещата във var блока не се променят м/у извикванията на функцията така че навярно трябва да са дефинирани извън. Може да са const преди това че са стрингове и не се променят.
- Принципно няма нищо лошо в ползването на fmt.Sprintf просто в случай може да ползваш стандартно конкатениране на стрингове.