Запись в csv идет в одну колонку

Всем привет! Не могу разобраться почему при записи данных из БД в csv файл все пишется в одну колонку, как записать все полученное в разные колонки? Ну и если кто знает как еще проставить заголовки в колонках(нагуглить не смог) - заранее спсибо

делал как написано в документации

В rowQery получаю данные из бд и далее:

введите сюда код

err1 := rowQery.Scan(&Id1, &Id2, &Id3, &Id4)
    if err1 != nil {
        log.Println(err1.Error())
    }
    records := [][]string{
        {strconv.Itoa(count), Id1, Id2, Id3, Id4},
    }
    fmt.Println(err1)
    count++

    w := csv.NewWriter(csvFile)

    for _, record := range records {
        if err := w.Write(record); err != nil {
            log.Fatalln(err)
        }
    }

    w.Flush()

    if err := w.Error(); err != nil {
        log.Fatal(err)
    }
}

текущий вывод введите сюда описание изображения

ожидаемый вывод введите сюда описание изображения


Ответы (1 шт):

Автор решения: Mark

В русскоязычном excel для формата csv разделителем столбцов является не запятая , а точка с запятой ;. Особенность локализации.

В документации пакета указано, что разделителем по умолчанию является запятая:

type Writer struct { Comma rune // Field delimiter (set to ',' by NewWriter) UseCRLF bool // True to use \r\n as the line terminator // contains filtered or unexported fields }

https://golang.org/pkg/encoding/csv/

Видно, что у райтера есть публичное поле Comma типа rune, в котором и храниться разделить. Попробуйте поменять его. Никогда не пользовался рунами, но думаю что-то подобное:

w := csv.NewWriter(csvFile)
delimiter, _ := utf8.DecodeRuneInString(";")
w.Comma = delimiter 
→ Ссылка