在golang中将结构发送到表单字段

时间:2017-09-19 05:46:03

标签: go

我有一个结构,我必须发送到api,这是一个发布请求。但输入是表单字段。字段包含字符串,整数,浮点数和图像。 我试图使用WriteField函数,但由于此函数只接受字符串作为参数,我不能处理整数和浮点数。我怎么做。这是我的结构和代码片段。

c := finalObject{
    name: Name,
    ProfilePic:"/img/unknown.jpg",
    owner:"Mr Hall",
    latitude:26.5473828,
    longitude:88.4249179,
    opendays:"Monday-Friday",
    openhours:"10am to 5pm",
    catId:82,
    address:address,
    phone_number:2312312,
    mobile_number:312312,
    email:"dsdas@a.com",
  }

  url := "https://abcd.com/a"
    fmt.Println("URL:>", url)
    b, err := json.Marshal(c)
    if err != nil {
      fmt.Println("error:", err)
    }
    os.Stdout.Write(b)
    var jsonStr = []byte(b)
    req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
    req.Header.Set("Authorization", "AUTH_TOKEN")
    req.Header.Set("enctype", "multipart/form-data")

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
      panic(err)
    }
    defer resp.Body.Close()

    fmt.Println("response Status:", resp.Status)
    fmt.Println("response Headers:", resp.Header)
    body, _ := ioutil.ReadAll(resp.Body)
    fmt.Println("response Body:", string(body))
    fmt.Printf("%#v", c);
  }

1 个答案:

答案 0 :(得分:1)

HTTP表单中的表单值仅作为字符串值发送。

如果您可以自由决定表单键,那么您可以将整个结构作为json编码的字符串添加到泛型"数据"字段并发送请求。否则,您必须将结构值转换为字符串表示形式以在请求中发送它们。