code: func ParseMax(req *http.Request, max int64) (*Data, error) {
  	data := newData()
  	contentType := req.Header.Get("Content-Type")
  	if strings.Contains(contentType, "multipart/form-data") {
  		if err := req.ParseMultipartForm(max); err != nil {
  			return nil, err
  		}
  		for key, vals := range req.MultipartForm.Value {
  			for _, val := range vals {
  				data.Add(key, val)
  			}
  		}
  		for key, files := range req.MultipartForm.File {
  			if len(files) != 0 {
  				data.AddFile(key, files[0])
  			}
  		}
  	} else if strings.Contains(contentType, "form-urlencoded") {
  		if err := req.ParseForm(); err != nil {
  			return nil, err
  		}
  		for key, vals := range req.PostForm {
  			for _, val := range vals {
  				data.Add(key, val)
  			}
  		}
  	} else if strings.Contains(contentType, "application/json") {
  		body, err := ioutil.ReadAll(req.Body)
  		if err != nil {
  			return nil, err
  		}
  		data.jsonBody = body
  		if err := parseJSON(data.Values, data.jsonBody); err != nil {
  			return nil, err
  		}
  	}
  	for key, vals := range req.URL.Query() {
  		for _, val := range vals {
  			data.Add(key, val)
  		}
  	}
  	return data, nil
  }
docs: // ParseMax parses the request body and url query parameters into
  // Data. The content in the body of the request has a higher priority,
  // will be added to Data first, and will be the result of any operation
  // which gets the first element for a given key (e.g. Get, GetInt, or GetBool).