code: func bindArray(bindType int, query string, arg interface{}, m *reflectx.Mapper) (string, []interface{}, error) {
  	// do the initial binding with QUESTION;  if bindType is not question,
  	// we can rebind it at the end.
  	bound, names, err := compileNamedQuery([]byte(query), QUESTION)
  	if err != nil {
  		return "", []interface{}{}, err
  	}
  	arrayValue := reflect.ValueOf(arg)
  	arrayLen := arrayValue.Len()
  	if arrayLen == 0 {
  		return "", []interface{}{}, fmt.Errorf("length of array is 0: %#v", arg)
  	}
  	var arglist []interface{}
  	for i := 0; i < arrayLen; i++ {
  		elemArglist, err := bindArgs(names, arrayValue.Index(i).Interface(), m)
  		if err != nil {
  			return "", []interface{}{}, err
  		}
  		arglist = append(arglist, elemArglist...)
  	}
  	if arrayLen > 1 {
  		bound = fixBound(bound, arrayLen)
  	}
  	// adjust binding type if we weren't on question
  	if bindType != QUESTION {
  		bound = Rebind(bindType, bound)
  	}
  	return bound, arglist, nil
  }
docs: // bindArray binds a named parameter query with fields from an array or slice of
  // structs argument.