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() *

我有一个Go软件包,其中包含大量(自动生成的)模型:

每个定义如下:

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() }
  ...
}

这是我做的一个测试,看起来很有效。 看起来您不需要使用指向接口的指针。这就是问题所在



这是我做的一个测试,看起来很有效。 看起来您不需要使用指向接口的指针。这就是问题所在



谢谢如果我可以更改生成的包,看起来它会起作用。如果我不能呢?那就用第二部分的建议。谢谢!如果我可以更改生成的包,看起来它会起作用。如果我不能呢?那就用第二部分的建议。