如何在Golang中获取XML响应?
我必须获得API请求的XML响应 我写的Go代码是如何在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,
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
}