248
}
249
250
>
e := reflect.ValueOf(items[0])
util.go
251
>
for e.Type().Kind() == reflect.Pointer {
252
e = e.Elem()
253
}
254
256
>
var exportedFields []int
257
>
t := e.Type()
258
>
for i := 0; i < e.NumField(); i++ {
259
>
if exportRgx.MatchString(t.Field(i).Name) {
260
>
fields = append(fields, t.Field(i).Name)
261
>
exportedFields = append(exportedFields, i)
262
>
}
263
}
264
265
>
table := tablewriter.NewWriter(writer)
util.go
266
>
table.SetBorder(false)
267
>
table.SetColumnSeparator("|")
268
>
table.SetHeader(fields)
269
>
table.SetHeaderLine(false)
270
>
for i := range items {
271
>
item := reflect.ValueOf(items[i])
272
>
for item.Type().Kind() == reflect.Pointer {
273
item = item.Elem()
274
}
276
>
for _, j := range exportedFields {
277
>
col := item.Field(j)
278
>
columns = append(columns, fmt.Sprintf("%v", col.Interface()))
279
>
}
280
>
table.Append(columns)
281
}
283
>
table.ClearRows()
284
>
285
>
return nil
286
}
287