code: func bindArgs(names []string, arg interface{}, m *reflectx.Mapper) ([]interface{}, error) {
  	arglist := make([]interface{}, 0, len(names))
  
  	// grab the indirected value of arg
  	v := reflect.ValueOf(arg)
  	for v = reflect.ValueOf(arg); v.Kind() == reflect.Ptr; {
  		v = v.Elem()
  	}
  
  	err := m.TraversalsByNameFunc(v.Type(), names, func(i int, t []int) error {
  		if len(t) == 0 {
  			return fmt.Errorf("could not find name %s in %#v", names[i], arg)
  		}
  
  		val := reflectx.FieldByIndexesReadOnly(v, t)
  		arglist = append(arglist, val.Interface())
  
  		return nil
  	})
  
  	return arglist, err
  }
docs: // private interface to generate a list of interfaces from a given struct
  // type, given a list of names to pull out of the struct.  Used by public
  // BindStruct interface.