如何使用对象而不是字节发送新请求?

I need to send an object of data e.g. {hello: "world", goodbye: "world"} to an API. I'm doing it like this right now:

inputs := form.GetElementsByTagName("input")

var data = make(map[string]interface{}) // after adding values this looks like this: {hello: "world", goodbye: "world"}

for value := range inputs {
    // Append all values from the inputs to a new array, with the key named by the input name attribute
    if inputs[value] != nil && inputs[value].(*dom.HTMLInputElement).Value != "" {
        data[inputs[value].(*dom.HTMLInputElement).Name] = inputs[value].(*dom.HTMLInputElement).Value
    }
}

parsedData, _ := json.Marshal(data)
req, _ := http.NewRequest(method, url, bytes.NewBuffer(parsedData))

req.Header.Set("Content-Type", "application/x-www-form-urlencoded")

client := &http.Client{}
go func() { // Must be a goroutine
    response, _ := client.Do(req)
    defer response.Body.Close()
}()

The problem I'm having is since we're sending it as a byte, the server always returns error responses as it's expecting to deal with an object.

How can I make sure it's sending an object instead of bytes?

You are setting the content type to application/x-www-form-urlencoded while you are sending the data in json format, so change your content-type when setting the request headers, along with that do not skip the error to check what is the error returned:

parsedData, err := json.Marshal(data)
if err != nil{
    fmt.Println(err)
}
req, err := http.NewRequest(method, url, parsedData) // send the parseData which are bytes returned from the marshal.
if err != nil{
    fmt.Println(err)
}
req.Header.Set("Content-Type", "application/json") // set the content type to json

go func() { // Must be a goroutine
    response, err := client.Do(req)
    if err != nil{
        fmt.Println(err)
    }
    defer response.Body.Close()
}()

// you should check for response status to verify the details as
fmt.Println("response Status:", response.Status)
fmt.Println("response Headers:", response.Header)
body, _ := ioutil.ReadAll(response.Body)
fmt.Println("response Body:", string(body))

One thing that should be taken into consideration is that you have not exported your struct fields. That can be the reason your json string becomes empty. Make your struct fields exportable by making their first letter of each field in caps.

I solved this using the "net/url" package.

data := url.Values{}

for value := range inputs {
    // Append all values from the inputs to a new array, with the key named by the input name attribute
    if inputs[value] != nil && inputs[value].(*dom.HTMLInputElement).Value != "" {
        data.Add(inputs[value].(*dom.HTMLInputElement).Name, inputs[value].(*dom.HTMLInputElement).Value)
    }
}

req, _ := http.NewRequest(method, actionUrl, strings.NewReader(data.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")