func newFlagSet(o Options, nGrps []*node.Nodes) (fs *flagSet, err error) {
	fs = &flagSet{
		fs:      flag.NewFlagSet(os.Args[0], flag.ExitOnError),
		fGroups: make([][]*Flag, 0),
		fNames:  make(map[string]bool),
		options: o,
	}
	if fs.options.HelpFunc == nil {
		fs.options.HelpFunc = defaultGenHelp
	}
	for _, nGrp := range nGrps {
		err = fs.makeFlags(nGrp)
		if err != nil {
			return nil, err
		}
	}
	if fs.fNames["help"] || fs.fNames["h"] {
		return nil, errors.New("cannot use reserved flags 'help' or 'h'")
	}
	fs.registerHelpMenu()
	return fs, nil
}
newFlagSet creates a new flagset and sets the flags.
The resulting flagset is useful for both getting the flag
help page bytes and setting values runtime flags.
package flag
import (
	"bytes"
	"errors"
	"flag"
	"fmt"
	"os"
	"strings"
	"github.com/pcelvng/go-config/util"
	"github.com/pcelvng/go-config/util/node"
)
var (
	flagTag = "flag"
	fmtTag  = "fmt"
	helpTag = "help"
	sepTag  = "sep"
	defaultSep = ","
)