Go 创建返回接口的函数的映射
我有一个Go软件包,其中包含大量(自动生成的)模型: 每个定义如下:Go 创建返回接口的函数的映射,go,Go,我有一个Go软件包,其中包含大量(自动生成的)模型: 每个定义如下: func NewTax2011_1() *Tax2011_1 { return &Tax2011_1 { ... } } 我想根据只有在运行时才知道的值(时间戳)来访问它们。 因此,我尝试将模型构造函数放入一个映射中: package tax type TaxModel interface { Calculate() } var taxModels = make(map[string]func() *
func NewTax2011_1() *Tax2011_1 {
return &Tax2011_1 { ... }
}
我想根据只有在运行时才知道的值(时间戳)来访问它们。
因此,我尝试将模型构造函数放入一个映射中:
package tax
type TaxModel interface {
Calculate()
}
var taxModels = make(map[string]func() *TaxModel)
func init() {
...
taxModels["2011_1"] = NewTax2011_1
taxModels["2011_2"] = NewTax2011_2
...
}
上述代码不正确:
cannot use NewTax2011_1 (type func() *Tax2011_1) as type func() *TaxModel in assignment
任何关于如何实现这一点的提示?假设
Tax2011\u 1
及其朋友实现了TaxModel
接口,您可以声明构造函数以返回接口:
func NewTax2011_1() TaxModel {
return &Tax2011_1{}
}
不应使用接口指针:
var taxModels = make(map[string]func() TaxModel)
那么它应该会起作用
如果无法更改构造函数,则可以使用适配器函数:
func NewTax2011_1() *Tax2011_1 {...}
var taxModels = make(map[string]func() TaxModel)
func init() {
...
taxModels["2011_1"] = func() TaxModel {return NewTax2011_1()}
taxModels["2011_2"] = func () TaxModel {return NewTax2011_2() }
...
}
假设
Tax2011\u 1
及其好友实现了TaxModel
接口,您可以声明构造函数以返回接口:
func NewTax2011_1() TaxModel {
return &Tax2011_1{}
}
不应使用接口指针:
var taxModels = make(map[string]func() TaxModel)
那么它应该会起作用
如果无法更改构造函数,则可以使用适配器函数:
func NewTax2011_1() *Tax2011_1 {...}
var taxModels = make(map[string]func() TaxModel)
func init() {
...
taxModels["2011_1"] = func() TaxModel {return NewTax2011_1()}
taxModels["2011_2"] = func () TaxModel {return NewTax2011_2() }
...
}
这是我做的一个测试,看起来很有效。 看起来您不需要使用指向接口的指针。这就是问题所在
这是我做的一个测试,看起来很有效。 看起来您不需要使用指向接口的指针。这就是问题所在
谢谢如果我可以更改生成的包,看起来它会起作用。如果我不能呢?那就用第二部分的建议。谢谢!如果我可以更改生成的包,看起来它会起作用。如果我不能呢?那就用第二部分的建议。