func SetCSVReader(csvReader func(io.Reader) CSVReader) {
	selfCSVReader = csvReader
}
SetCSVReader sets the CSV reader used to parse CSV.
package gocsv
import (
	"bytes"
	"encoding/csv"
	"fmt"
	"io"
	"os"
	"reflect"
	"strings"
	"sync"
)
var FailIfUnmatchedStructTags = false
var FailIfDoubleHeaderNames = false
var ShouldAlignDuplicateHeadersWithStructFieldOrder = false
var TagName = "csv"
var TagSeparator = ","
type Normalizer func(string) string
type ErrorHandler func(*csv.ParseError) bool
var normalizeName = DefaultNameNormalizer()
func DefaultNameNormalizer() Normalizer { return func(s string) string { return s } }
func SetHeaderNormalizer(f Normalizer) {
	normalizeName = f
	structInfoCache = sync.Map{}
}
var selfCSVWriter = DefaultCSVWriter
func DefaultCSVWriter(out io.Writer) *SafeCSVWriter {
	writer := NewSafeCSVWriter(csv.NewWriter(out))
	if runes := []rune(strings.TrimSpace(TagSeparator)); len(runes) > 0 {
		writer.Comma = runes[0]
	}
	return writer
}
func SetCSVWriter(csvWriter func(io.Writer) *SafeCSVWriter) {
	selfCSVWriter = csvWriter
}
func getCSVWriter(out io.Writer) *SafeCSVWriter {
	return selfCSVWriter(out)
}
var selfCSVReader = DefaultCSVReader
func DefaultCSVReader(in io.Reader) CSVReader {
	return csv.NewReader(in)
}
func LazyCSVReader(in io.Reader) CSVReader {
	csvReader := csv.NewReader(in)
	csvReader.LazyQuotes = true
	csvReader.TrimLeadingSpace = true
	return csvReader
}