我有一个将http响应json解码为一个结构的函数,并且我需要两种类型的结构来传递给该函数,并以该结构的类型作为返回值来获取解码的json。
我的函数现在可以处理一种类型,需要帮助以使其可以处理不同类型的结构,并返回该结构。
// Response json
type responseResult struct {
result string
}
type loginResult struct {
responseResult
token string
}
func responseBodyDecoder(resp http.Response,response *responseResult) {
// get result form Response
decoder := json.NewDecoder(resp.Body)
decode_err := decoder.Decode(&response)
if decode_err != nil {
panic(decode_err)
}
}
答案 0 :(得分:1)
您可以使用类型interface{}
:
func responseBodyDecoder(resp http.Response,response interface{}) {
// get result form Response
decoder := json.NewDecoder(resp.Body)
decode_err := decoder.Decode(response)
if decode_err != nil {
panic(decode_err)
}
}
现在,您可以:
ret:=loginResult{}
responseBodyDecoder(resp, &ret)
ret2:=responseResult{}
responseBodyDecoder(resp, &ret2)
但是要小心,结构responseResult
和responseResult
都不会导出任何元素。
您必须修改定义:
type responseResult struct {
Result string
}