Метод csv.Writer.Flush
Метод csv.Writer.Flush записывает все данные,
накопленные во внутреннем буфере, в основной поток вывода
(например, в файл или в сетевой сокет).
После вызова Flush буфер становится пустым,
и все ранее записанные записи гарантированно передаются
в нижележащий поток. Метод не принимает параметров и не
возвращает значений. Если во время записи произошла ошибка,
она сохраняется внутри объекта Writer и ее можно
получить методом Error.
Синтаксис
writer.Flush()
Пример
Давайте создадим CSV-запись и запишем ее в файл,
а затем вызовем Flush для принудительной
записи всех данных:
package main
import (
"encoding/csv"
"os"
)
func main() {
file, _ := os.Create("data.csv")
defer file.Close()
writer := csv.NewWriter(file)
writer.Write([]string{"a", "b", "c"})
writer.Write([]string{"d", "e", "f"})
writer.Flush()
}
После выполнения кода в файле data.csv
будут записаны две строки:
a,b,c
d,e,f
Пример
Давайте запишем несколько записей и проверим,
что после вызова Flush буфер очищается.
Для этого мы создадим писатель с буфером небольшого
размера и вызовем Flush после каждой записи:
package main
import (
"bytes"
"encoding/csv"
"fmt"
)
func main() {
buf := &bytes.Buffer{}
writer := csv.NewWriter(buf)
writer.Write([]string{"1", "2", "3"})
writer.Flush()
fmt.Printf("After first flush: %q\n", buf.String())
writer.Write([]string{"4", "5", "6"})
writer.Flush()
fmt.Printf("After second flush: %q\n", buf.String())
}
Результат выполнения кода:
"After first flush: "1,2,3\n""
"After second flush: "1,2,3\n4,5,6\n""
Пример
Важно помнить, что Flush не возвращает ошибку,
а сохраняет ее внутри объекта. Проверим это,
записав в недоступный файл:
package main
import (
"encoding/csv"
"fmt"
"os"
)
func main() {
file, _ := os.OpenFile("/root/data.csv", os.O_CREATE|os.O_WRONLY, 0644)
defer file.Close()
writer := csv.NewWriter(file)
writer.Write([]string{"a", "b", "c"})
writer.Flush()
if err := writer.Error(); err != nil {
fmt.Printf("Error: %v\n", err)
}
}
Результат выполнения кода:
"Error: open /root/data.csv: permission denied"
Смотрите также
-
метод
csv.Writer.Write,
который записывает одну CSV-запись в буфер -
метод
csv.Writer.WriteAll,
который записывает все записи и автоматически вызываетFlush -
функцию
csv.NewWriter,
которая создает новый объектWriter -
метод
csv.Writer.Error,
который возвращает последнюю ошибку записи