code: func maybeExpandNamedQuery(m *DbMap, query string, args []interface{}) (string, []interface{}) {
  	var (
  		arg    = args[0]
  		argval = reflect.ValueOf(arg)
  	)
  	if argval.Kind() == reflect.Ptr {
  		argval = argval.Elem()
  	}
  
  	if argval.Kind() == reflect.Map && argval.Type().Key().Kind() == reflect.String {
  		return expandNamedQuery(m, query, func(key string) reflect.Value {
  			return argval.MapIndex(reflect.ValueOf(key))
  		})
  	}
  	if argval.Kind() != reflect.Struct {
  		return query, args
  	}
  	if _, ok := arg.(time.Time); ok {
  		// time.Time is driver.Value
  		return query, args
  	}
  	if _, ok := arg.(driver.Valuer); ok {
  		// driver.Valuer will be converted to driver.Value.
  		return query, args
  	}
  
  	return expandNamedQuery(m, query, argval.FieldByName)
  }
docs: // maybeExpandNamedQuery checks the given arg to see if it's eligible to be used
  // as input to a named query.  If so, it rewrites the query to use
  // dialect-dependent bindvars and instantiates the corresponding slice of
  // parameters by extracting data from the map / struct.
  // If not, returns the input values unchanged.