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

问题描述 投票:-2回答:1

我有一个函数解码http响应json到struct.And我有两种类型的结构需要传递给这个函数,并具有结构类型作为返回值来获取解码的json。

我的函数现在可以处理ONE类型,需要帮助使它可以处理不同类型的struct,并返回struct。

// 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)
    }
}

go
1个回答
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)

但要小心,struct responseResultresponseResult都不会导出任何元素。你必须修改定义:

type responseResult struct {
    Result string
}

© www.soinside.com 2019 - 2024. All rights reserved.