code: func (ctx *RequestCtx) FormValue(key string) []byte {
  	v := ctx.QueryArgs().Peek(key)
  	if len(v) > 0 {
  		return v
  	}
  	v = ctx.PostArgs().Peek(key)
  	if len(v) > 0 {
  		return v
  	}
  	mf, err := ctx.MultipartForm()
  	if err == nil && mf.Value != nil {
  		vv := mf.Value[key]
  		if len(vv) > 0 {
  			return []byte(vv[0])
  		}
  	}
  	return nil
  }
docs: // FormValue returns form value associated with the given key.
  //
  // The value is searched in the following places:
  //
  //   * Query string.
  //   * POST or PUT body.
  //
  // There are more fine-grained methods for obtaining form values:
  //
  //   * QueryArgs for obtaining values from query string.
  //   * PostArgs for obtaining values from POST or PUT body.
  //   * MultipartForm for obtaining values from multipart form.
  //   * FormFile for obtaining uploaded files.
  //
  // The returned value is valid until returning from RequestHandler.