code: func parseQuery(query string, m url.Values, shouldUnescape bool) error {
  	var err error
  	for query != "" {
  		key := query
  		if i := strings.IndexAny(key, "&;"); i >= 0 {
  			key, query = key[:i], key[i+1:]
  		} else {
  			query = ""
  		}
  		if key == "" {
  			continue
  		}
  		if i := strings.Index(key, "="); i >= 0 {
  			value := ""
  			key, value = key[:i], key[i+1:]
  			if shouldUnescape {
  				key, err = url.QueryUnescape(key)
  				if err != nil {
  					return errors.Trace(err)
  				}
  				value, err = url.QueryUnescape(value)
  				if err != nil {
  					return errors.Trace(err)
  				}
  			}
  			m[key] = append(m[key], value)
  		} else {
  			if shouldUnescape {
  				key, err = url.QueryUnescape(key)
  				if err != nil {
  					return errors.Trace(err)
  				}
  			}
  			if _, ok := m[key]; !ok {
  				m[key] = nil
  			}
  		}
  	}
  	return errors.Trace(err)
  }
docs: // parseQuery is used to parse query string in URL with shouldUnescape, due to golang http package can not distinguish
  // query like "?a=" and "?a". We rewrite it to separate these two queries. e.g.
  // "?a=" which means that a is an empty string "";
  // "?a"  which means that a is null.
  // If shouldUnescape is true, we use QueryUnescape to handle keys and values that will be put in m.
  // If shouldUnescape is false, we don't use QueryUnescap to handle.