我必须获得 API 请求的 XML 响应。
我写的 Go 代码是,
type RequestData struct {
Method string
RelativeURL string
Parameters map[string]interface{}
URLParameters string
}
type ResponseData struct {
StatusCode int
Header http.Header
Body map[string]interface{}
}
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
}
所以这是我得到的错误。
它说unknown type map[string]interface {} exit status 1
我猜这个错误是因为这一行 - Body: make(map[string]interface{}),
在 ExecRequest 的 ResponseData 结构中。我不知道如何为我发送的数据获取 XML 响应,请帮帮我。基本上,在执行这个 GET 请求之后,我必须得到一个 XML 输出。
答案 0 :(得分:-1)
我认为这个帖子可能会有所帮助:Unmarshal XML Into a Map
我建议将其解组为一个结构体,这是一种惯用的 Go 方法。否则,您需要从 XML 提供自定义解组器以进行映射。