Проблема, которую я пытаюсь решить
Мне нужно отобразить некоторые данные пользователю в отформатированном виде (какая-то таблица в моем случае). Поэтому я использую text/tabwriter
пакет в качестве простой опции. Я попытался вывести отформатированные строки в string.Builder
для дальнейшего преобразования в простой тип строки. (os.Stdout
не вариант в моем случае).
Сложности, с которыми я столкнулся
Когда я использую strings.Builder
в качестве аргумента output
(тип io.Writer
) в Функция tabwriter.NewWriter()
фактически ничего не выводит (см. Пример кода в разделе ниже). Эта проблема не появляется, когда я использую os.Stdout
или любой другой файл в качестве вывода.
Что я пытался сделать
У меня есть тестовая структура, которая представляет некоторые данные, которые мне нужны на вывод:
type someData struct {
FieldOne string
FieldTwo string
}
Функция, которая форматирует эти данные и возвращает строку:
func formatData(data []someData) string {
var builder strings.Builder
writer := tabwriter.NewWriter(&builder, 0, 0, 3, ' ', 0)
defer writer.Flush()
for _, d := range data {
fmt.Fprintln(writer, d.FieldOne+"\t"+d.FieldTwo)
}
return builder.String()
}
Вызов функции с тестовыми данными:
data := []someData{
someData{
FieldOne: "sample",
FieldTwo: "data",
},
someData{
FieldOne: "something",
FieldTwo: "here",
},
}
fmt.Println(formatData(data))
Этот код доступен на Go Playground .
Но когда я использую os.Stdout
в качестве выхода, он работает нормально. Рабочий код также доступен на Go Playground .
Также проблема не появляется, если я не использую '\t'
в строке для табрайтера.
( Этот: fmt.Fprintln(writer, d.FieldOne+"\t"+d.FieldTwo)
)
Пример с '.'
вместо '\t'
также доступен. Детская площадка Go
Заранее благодарим за любую помощь.