func (reader *reader) reset(src []byte) {
	reader.br.Reset(src)
	reader.b = 0
	reader.r = 0
	reader.lineNum = 0
	reader._var = &variable{
		mode: lineModeEmpty,
	}
	reader.sec = &Section{
		mode: lineModeEmpty,
	}
	reader.buf.Reset()
	reader.bufComment.Reset()
	reader.bufFormat.Reset()
	reader.bufSpaces.Reset()
}
reset all reader attributes, excluding filename.
package ini
import (
	"bytes"
	"errors"
	"fmt"
	"io"
	"io/ioutil"
	"unicode"
	"github.com/shuLhan/share/lib/debug"
)
const (
	tokBackslash   = '\\'
	tokBackspace   = '\b'
	tokDot         = '.'
	tokDoubleQuote = '"'
	tokEqual       = '='
	tokHash        = '#'
	tokHyphen      = '-'
	tokNewLine     = '\n'
	tokSecEnd      = ']'
	tokSecStart    = '['
	tokSemiColon   = ';'
	tokSpace       = ' '
	tokTab         = '\t'
	tokUnderscore  = '_'
)
var (
	errBadConfig      = errors.New("bad config line %d at %s")
	errVarNoSection   = "variable without section, line %d at %s"
	errVarNameInvalid = errors.New("invalid variable name, line %d at %s")
	errValueInvalid   = errors.New("invalid value, line %d at %s")
)
type reader struct {
	br         *bytes.Reader
	b          byte
	r          rune
	lineNum    int
	filename   string
	_var       *variable
	sec        *Section
	buf        bytes.Buffer
	bufComment bytes.Buffer
	bufFormat  bytes.Buffer
	bufSpaces  bytes.Buffer
}
func newReader() (r *reader) {
	r = &reader{
		br: bytes.NewReader(nil),
	}
	r.reset(nil)
	return
}