Емилиан обнови решението на 25.10.2015 23:24 (преди над 2 години)
+package main
+
+import "strings"
+
+func ExtractColumn(logContents string, column uint8) string {
+ if len(logContents) > 28 {
+ var columns [3]string
+ var rows []string = strings.Split(logContents, "\n")
+ if len(rows) > 0 {
+ for i := 0; i < len(rows); i++ {
+ if rows[i] != "" {
+ var splittedRow []string = strings.SplitN(rows[i], " ", 4)
+ columns[0] += splittedRow[0] + " " + splittedRow[1] + "\n"
+ columns[1] += splittedRow[2] + "\n"
+ columns[2] += splittedRow[3] + "\n"
+ }
+ }
+ }
+ return columns[column]
+ } else {
+ return ""
+ }
+}
Изглежда добре, но:
- В Go е прието (а и в повечето езици) първо да се разглеждат "изключителните"/"грешните" случаи и след това да се продължава с не такивата - тоест по правилно е да се провери дали дължината не е твърде малка и после, не във else да се продължи. Else-а няма да трябва защото ще return-неш в if-а, което правиш и в момента :).
- не съм убеден в тази проверка за дължината
- виж точка 1 за if-а с
len(rows) > 0
- може би същото за if-а с
rows[i] != ""
- на принцип не ми харесва че конструираш и трите възможни резултата при положение че знаеш кой ще трябва, но не е грешно, просто не е ефективно