func AddAllFlagsToPFlagSet(fs *pflag.FlagSet) {
	AddFlagSetToPFlagSet(flag.CommandLine, fs)
}
Adds all of the top level 'flag' package flags to a 'pflag.FlagSet'.
package util
import (
	"flag"
	"reflect"
	"strings"
	"github.com/spf13/pflag"
)
type flagValueWrapper struct {
	inner    flag.Value
	flagType string
}
func wrapFlagValue(v flag.Value) pflag.Value {
	if pv, ok := v.(pflag.Value); ok {
		return pv
	}
	pv := &flagValueWrapper{
		inner: v,
	}
	t := reflect.TypeOf(v)
	if t.Kind() == reflect.Interface || t.Kind() == reflect.Ptr {
		t = t.Elem()
	}
	pv.flagType = t.Name()
	pv.flagType = strings.TrimSuffix(pv.flagType, "Value")
	return pv
}
func (v *flagValueWrapper) String() string {
	return v.inner.String()
}
func (v *flagValueWrapper) Set(s string) error {
	return v.inner.Set(s)
}
func (v *flagValueWrapper) Type() string {
	return v.flagType
}
type boolFlag interface {
	flag.Value
	IsBoolFlag() bool
}
func (v *flagValueWrapper) IsBoolFlag() bool {
	if bv, ok := v.inner.(boolFlag); ok {
		return bv.IsBoolFlag()
	}
	return false
}
func AddFlagToPFlagSet(f *flag.Flag, fs *pflag.FlagSet) {
	if fs.Lookup(f.Name) == nil {
		fs.Var(wrapFlagValue(f.Value), f.Name, f.Usage)
	}
}
func AddFlagSetToPFlagSet(fsIn *flag.FlagSet, fsOut *pflag.FlagSet) {
	fsIn.VisitAll(func(f *flag.Flag) {
		AddFlagToPFlagSet(f, fsOut)
	})
}