gpt4 book ai didi

go - 创建返回接口(interface)的函数映射

转载 作者:行者123 更新时间:2023-12-01 20:23:49 24 4
gpt4 key购买 nike

我有一个包含大量(自动生成)模型的 Go 包:

Tax2001_1
Tax2001_2
Tax2001_3
...
Tax2020_1
每个定义如下:
func NewTax2011_1() *Tax2011_1 {
return &Tax2011_1 { ... }
}
我想根据仅在运行时知道的值(时间戳)来访问它们。
所以我试图将模型构造函数放入 map 中:
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_1及其 friend 实现TaxModel接口(interface),可以声明构造函数返回接口(interface):

func NewTax2011_1() TaxModel {
return &Tax2011_1{}
}
您不应该使用接口(interface)指针:
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() }
...
}

关于go - 创建返回接口(interface)的函数映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63198630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com