func newFile(dataSources []dataSource, opts LoadOptions) *File {
	if len(opts.KeyValueDelimiters) == 0 {
		opts.KeyValueDelimiters = "=:"
	}
	if len(opts.KeyValueDelimiterOnWrite) == 0 {
		opts.KeyValueDelimiterOnWrite = "="
	}
	if len(opts.ChildSectionDelimiter) == 0 {
		opts.ChildSectionDelimiter = "."
	}
	return &File{
		BlockMode:   true,
		dataSources: dataSources,
		sections:    make(map[string][]*Section),
		options:     opts,
	}
}
newFile initializes File object with given data sources.
package ini
import (
	"bytes"
	"errors"
	"fmt"
	"io"
	"io/ioutil"
	"os"
	"strings"
	"sync"
)
type File struct {
	options     LoadOptions
	dataSources []dataSource
	BlockMode bool
	lock      sync.RWMutex
	sectionList []string
	sectionIndexes []int
	sections map[string][]*Section
	NameMapper
	ValueMapper
}