code: func PostMultipartForm(fields []MultipartFormField, uri string) (respBody []byte, err error) {
  	bodyBuf := &bytes.Buffer{}
  	bodyWriter := multipart.NewWriter(bodyBuf)
  
  	for _, field := range fields {
  		if field.IsFile {
  			fileWriter, e := bodyWriter.CreateFormFile(field.Fieldname, field.Filename)
  			if e != nil {
  				err = fmt.Errorf("error writing to buffer , err=%v", e)
  				return
  			}
  
  			fh, e := os.Open(field.Filename)
  			if e != nil {
  				err = fmt.Errorf("error opening file , err=%v", e)
  				return
  			}
  			defer fh.Close()
  
  			if _, err = io.Copy(fileWriter, fh); err != nil {
  				return
  			}
  		} else {
  			partWriter, e := bodyWriter.CreateFormField(field.Fieldname)
  			if e != nil {
  				err = e
  				return
  			}
  			valueReader := bytes.NewReader(field.Value)
  			if _, err = io.Copy(partWriter, valueReader); err != nil {
  				return
  			}
  		}
  	}
  
  	contentType := bodyWriter.FormDataContentType()
  	bodyWriter.Close()
  
  	resp, e := http.Post(uri, contentType, bodyBuf)
  	if e != nil {
  		err = e
  		return
  	}
  	defer resp.Body.Close()
  	if resp.StatusCode != http.StatusOK {
  		return nil, err
  	}
  	respBody, err = ioutil.ReadAll(resp.Body)
  	return
  }
docs: //PostMultipartForm 上传文件或其他多个字段