code: func (operation *Operation) ParseParamComment(commentLine string, astFile *ast.File) error {
  	matches := paramPattern.FindStringSubmatch(commentLine)
  	if len(matches) != 6 {
  		return fmt.Errorf("missing required param comment parameters \"%s\"", commentLine)
  	}
  	name := matches[1]
  	paramType := matches[2]
  
  	schemaType := matches[3]
  
  	requiredText := strings.ToLower(matches[4])
  	required := requiredText == "true" || requiredText == "required"
  	description := matches[5]
  
  	var param spec.Parameter
  
  	//five possible parameter types.
  	switch paramType {
  	case "query", "path", "header":
  		param = createParameter(paramType, description, name, TransToValidSchemeType(schemaType), required)
  	case "body":
  		param = createParameter(paramType, description, name, "object", required) // TODO: if Parameter types can be objects, but also primitives and arrays
  		if err := operation.registerSchemaType(schemaType, astFile); err != nil {
  			return err
  		}
  		param.Schema.Ref = spec.Ref{
  			Ref: jsonreference.MustCreateRef("#/definitions/" + schemaType),
  		}
  	case "formData":
  		param = createParameter(paramType, description, name, TransToValidSchemeType(schemaType), required)
  	default:
  		return fmt.Errorf("%s is not supported paramType", paramType)
  	}
  
  	if err := operation.parseAndExtractionParamAttribute(commentLine, schemaType, &param); err != nil {
  		return err
  	}
  	operation.Operation.Parameters = append(operation.Operation.Parameters, param)
  	return nil
  }
docs: // ParseParamComment parses params return []string of param properties
  // E.g. @Param	queryText		form	      string	  true		        "The email for login"
  //              [param name]    [paramType] [data type]  [is mandatory?]   [Comment]
  // E.g. @Param   some_id     path    int     true        "Some ID"