func (c *Configure) option(value interface{}, name string, def interface{}, description string, typ valueType) {
	opt := &option{
		name:        name,
		def:         def,
		description: description,
		typ:         typ,
		value:       value,
	}
	c.options[name] = opt
}
option will bind a pointer to a value provided in the value parameter to
set flag value.
package configure
import (
	"fmt"
	"os"
)
type Checker interface {
	Setup() error
	Int(name string) (int, error)
	String(name string) (string, error)
	Bool(name string) (bool, error)
}
type Configure struct {
	options map[string]*option  
	stack   []Checker           
}
func (c *Configure) IntVar(value *int, name string, def int, description string) {
	c.option(value, name, def, description, intType)
}
func (c *Configure) Int(name string, def int, description string) *int {
	i := new(int)
	c.IntVar(i, name, def, description)
	return i
}
func (c *Configure) StringVar(value *string, name string, def string, description string) {
	c.option(value, name, def, description, stringType)
}
func (c *Configure) String(name string, def string, description string) *string {
	s := new(string)
	c.StringVar(s, name, def, description)
	return s
}
func (c *Configure) BoolVar(value *bool, name string, def bool, description string) {
	c.option(value, name, def, description, boolType)
}
func (c *Configure) Bool(name string, def bool, description string) *bool {
	b := new(bool)
	c.BoolVar(b, name, def, description)
	return b
}