如何在Golang中获取XML响应?

如何在Golang中获取XML响应?,xml,api,go,Xml,Api,Go,我必须获得API请求的XML响应 我写的Go代码是 type RequestData struct { Method string RelativeURL string Parameters map[string]interface{} URLParameters string } 在这个主函数中,我调用了所有这些函数 func List(parameters map[string]string) (*sdk.ResponseData,

我必须获得API请求的XML响应

我写的Go代码是

type RequestData struct {
    Method        string
    RelativeURL   string
    Parameters    map[string]interface{}
    URLParameters string
}
在这个主函数中,我调用了所有这些函数

func List(parameters map[string]string) (*sdk.ResponseData, error) {
    
    requestURL := "API endpoint"
    response, err := sdk.ExecRequest(
        &sdk.RequestData{
            Method:        "GET",
            RelativeURL:   requestURL,
            URLParameters: parameters["URLParameters"],
        },
    )
    if err != nil {
        return nil, err
    }

    return response, nil
}
这是我得到的错误。 它表示
未知类型映射[string]接口{}退出状态1

我猜是因为ExecRequest的ResponseData结构中的这一行-
Body:make(map[string]interface{}),
导致了错误。我不知道如何为我发送的数据获取XML响应,请帮助我。基本上,在执行这个GET请求之后,我必须获得一个XML输出。

我认为这个线程可以帮助:


我建议将其解组成一个结构,这是一种惯用的方法。否则,您需要提供从XML到映射的自定义解组器。

我认为该线程不会有帮助,因为在这里我没有任何XML作为输入来将其转换为映射,我只需要XML格式的输出。
func ExecRequest(requestData *RequestData) (*ResponseData, error) {
    var requestParameters []byte
    var err error

    ...

    if requestData.Parameters != nil {
        // Unmarshal parameters
        requestParameters, err = xml.Marshal(requestData.Parameters)
        if err != nil {
            return nil, err
        }
    }

    // Create http request
    request, err := http.NewRequest(
        requestData.Method,
        absoluteURL,
        bytes.NewBuffer(requestParameters),
    )
    if err != nil {
        return nil, err
    }

    // Set request headers
    SetRequestHeaders(request)

    // Initialize http client
    httpClient := http.Client{}

    // Execute http request
    response, err := httpClient.Do(request)
    if err != nil {
        return nil, err
    }

    // Create response data struct
    responseData := &ResponseData{
        StatusCode: response.StatusCode,
        Header:     response.Header,
        Body:       make(map[string]interface{}),
    }

    // Convert response body type to byte slice
    defer response.Body.Close()
    body, err := ioutil.ReadAll(response.Body)
    if err != nil {
        return nil, err
    }

    // Convert body type to map
    err = xml.Unmarshal(body, &responseData.Body)
    if err != nil {
        return nil, err
    }

    return responseData, nil
}
func List(parameters map[string]string) (*sdk.ResponseData, error) {
    
    requestURL := "API endpoint"
    response, err := sdk.ExecRequest(
        &sdk.RequestData{
            Method:        "GET",
            RelativeURL:   requestURL,
            URLParameters: parameters["URLParameters"],
        },
    )
    if err != nil {
        return nil, err
    }

    return response, nil
}