Есть несколько проблем с вашим кодом.Во-первых, функция append
не добавляется на место, поэтому, где вы делаете append(data, []string(b))
, результат отбрасывается, поэтому я думаю, что вы хотите вместо этого сделать data = append(data, []string(b))
.
Также, выполнение json.Marshal
на структуру не будет составлять кусочек строк, которые вы пытаетесь использовать как.Вместо этого он выдаст единственную строку со всеми значениями, такими как {"googlemapref":"something","depth":10}
.Создатель таблиц, который вы хотите использовать, ожидает, что в таблицу будет помещен фрагмент значений, которые соответствуют заголовкам (где вы можете использовать примеры заголовков "Name", "Sign", "Rating"
.
Вы могли бы используйте reflect
пакет, как json
, чтобы заполнить поля в каждой строке, но я думаю, что это будет сложнее, чем стоит, и вам лучше просто заполнить каждую строку, вызвав соответствующие поля:
func print(quakes []Quake) {
var data [][]string
for _, quake := range quakes {
row := []string{quake.Googlemapref, quake.Segree, strconv.Itoa(quake.Depth),...}
data = append(data, row)
}
table := tablewriter.NewWriter(os.Stdout)
table.SetHeader([]string{"googlemapref", "degree", "depth",...})
for _, v := range newData {
table.Append(v)
}
table.Render() // Send output
}
(я оставил ...
для вас, чтобы вы заполнили другие поля самостоятельно, но включил глубину, чтобы показать, как преобразовать его в строку).