我遇到一种情况,我需要与一堆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都有类似的方法,例如Buy
和Sell
以及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中习惯性地解决这个问题?