package main

import (
	"bytes"
	"encoding/csv"
	"errors"
	"fmt"
	"io"
)

func main() {
	var buf bytes.Buffer
	w := csv.NewWriter(&buf)
	if err := w.Write([]string{"nama", "kota", "email"}); err != nil {
		fmt.Println("tulis gagal:", err)
		return
	}
	if err := w.Write([]string{"Budi", "Bandung", "budi@example.com"}); err != nil {
		fmt.Println("tulis gagal:", err)
		return
	}
	if err := w.Write([]string{"Siti, Ny.", "Surabaya", "siti@example.com"}); err != nil {
		fmt.Println("tulis gagal:", err)
		return
	}
	w.Flush()
	if err := w.Error(); err != nil {
		fmt.Println("flush gagal:", err)
		return
	}
	fmt.Printf("isi buffer mentah: %q\n", buf.String())

	r := csv.NewReader(bytes.NewReader(buf.Bytes()))
	for {
		rekam, err := r.Read()
		if err == io.EOF {
			break
		}
		if err != nil {
			fmt.Println("baca gagal:", err)
			return
		}
		fmt.Printf("rekam: %q\n", rekam)
	}

	dataBuruk := []byte("nama,kota\nBudi\n")
	r2 := csv.NewReader(bytes.NewReader(dataBuruk))
	if _, err := r2.ReadAll(); err != nil {
		fmt.Println("galat:", err)
		fmt.Println("galat adalah ErrFieldCount?", errors.Is(err, csv.ErrFieldCount))
	}
}
