如何构建go中接口的数据类型转换?

时间:2017-07-14 05:09:31

标签: go interface

我遇到一种情况,我需要与一堆API进行交互,这些API都有类似的用途但返回了不同的数据结构。我需要以相同的方式对来自所有API的数据进行操作,但我还需要稍后将该数据发送回API,以便它可以对其执行进一步的操作。

type API1Response struct {
    Time time.Time
    Price int64
    Status int
    ID string
}

type API2Response struct {
    Price float64
    Status string
    ID int64
}

//更多API响应,其结构存在不可调和的差异

两个API都有类似的方法,例如BuySell以及CancelOrder所以我想我 可以使用接口来使我对这些方法的调用更加有用,但我必须这样做 使方法返回interface{}而不是返回其特定的API响应...

现在想象一下我想要Buy并得到API1Response的情况。所以我打电话给 在我的界面中定义的方法但我想要CancelOrder需要我发送 API1Response返回API。如何正确地将界面转换回API1Response?

我能想到的唯一方法就是制作一个试图转换为的长开关盒 每种可能的数据类型,但IDK,如果从长远来看,这是惯用的或容易出错...

if t, ok := emptyInterface.(API1Response); ok {
    //do stuff
} else if t, ok := emptyInterface.(API2Response); ok {
    // do stuff
}

你会如何在go中习惯性地解决这个问题?

0 个答案:

没有答案