如何在Golang中将不同类型的struct作为参数传递给函数

时间:2019-04-30 03:31:52

标签: go

我有一个将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)
    }
}

1 个答案:

答案 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)

但是要小心,结构responseResultresponseResult都不会导出任何元素。 您必须修改定义:

type responseResult struct {
    Result string
}