Generics 如何使结构字段成为泛型类型
我正在导入两个(以及更多)在功能上相关但彼此不同的外部库。我希望能够做到以下几点:Generics 如何使结构字段成为泛型类型,generics,go,struct,Generics,Go,Struct,我正在导入两个(以及更多)在功能上相关但彼此不同的外部库。我希望能够做到以下几点: 创建每个对象的新对象 将每个字段指定给嵌套结构的一个字段 能够使用嵌套结构的字段访问库方法 大致如下: import ( "github.com/bittrex_api_wrapper" "github.com/kraken_api_wrapper" ) type Exchange struct { bittrex *data kraken *data }
- 创建每个对象的新对象
- 将每个字段指定给嵌套结构的一个字段
- 能够使用嵌套结构的字段访问库方法
import (
"github.com/bittrex_api_wrapper"
"github.com/kraken_api_wrapper"
)
type Exchange struct {
bittrex *data
kraken *data
}
type data struct {
cntr int
api ????
}
func Initialize() Exchange {
e Exchange
brex := bittrex_api_wrapper.New("APIKEY1", "SECRET1")
krak := kraken_api_wrapper.New("APIKEY2", "SECRET2")
brexData := data {
cntr: 0,
api: brex,
}
krakData := data {
cntr: 0,
api: krak,
}
e = Exchange {
bittrex: brexData,
kraken: krakData,
}
return e
}
func (e *Exchange) CheckBalance(exng string) float64 {
switch exng {
case "kraken":
return e.kraken.api.Balance()
case "bittrex":
return e.bittrex.api.Balance()
}
}
在我寻找答案的过程中,似乎reflect包或接口可能是我的解决方案(或两者的某种组合),但我不是一名开发人员,也不是新手,所以reflect有点让我不知所措
非常感谢您的帮助 使用界面:
type balancer interface {
Balance() int64
}
type data struct {
cntr int
api balancer
}
请注意,与许多其他声称拥有接口的OO语言不同,
在Go中,这个概念是“向后的”:您可以定义任何接口,然后
确保Go运行时确保分配给该自定义接口的变量的值1)满足该接口,2)允许直接调用该接口上的接口方法。
也就是说,来自任何外部代码的任何数据结构都可以
可能支持任意数量的接口,但不知道这一点
你可以从一开始
请注意,指定的方法仅在两个“包装器”包都存在时有效
您可以定义它们各自的数据类型,以使它们
相同的Balance()
函数,这意味着它们必须具有相同的返回类型(或两者都没有)。使用界面:
type balancer interface {
Balance() int64
}
type data struct {
cntr int
api balancer
}
请注意,与许多其他声称拥有接口的OO语言不同,
在Go中,这个概念是“向后的”:您可以定义任何接口,然后
确保Go运行时确保分配给该自定义接口的变量的值1)满足该接口,2)允许直接调用该接口上的接口方法。
也就是说,来自任何外部代码的任何数据结构都可以
可能支持任意数量的接口,但不知道这一点
你可以从一开始
请注意,指定的方法仅在两个“包装器”包都存在时有效
您可以定义它们各自的数据类型,以使它们
相同的
Balance()
函数,这意味着它们必须具有相同的返回类型(或者两者都没有)。很难从发布的源代码中确切地看出您希望如何工作-是否需要在每个Exchange
对象上都提供这两个API?但是,我可以说,我98%确定您不需要对此进行反射。很难从发布的源代码中确切地看出您希望它如何工作-是否需要在每个Exchange
对象上都提供这两个API?然而,我可以说,我98%确信你不需要对此进行反思。