【发布时间】:2023-01-28 04:26:22
【问题描述】:
有一个模块定义了一堆类型
type Thing1 struct {}
type Thing2 struct {}
以及将这些类型作为参数的函数类型
type T1 func(t *Thing1) {...}
type T2 func(t *Thing2) {...}
然后它使用这些函数类型定义一个映射
var (
ModThing1 = map[string] T1
ModThing2 = map[string] T2
)
在我使用此模块的应用程序中,我想对 Thing1 和 Thing2 使用泛型
就像是
func do[T any](in *T, inMap map[string]func(in *T)) {
for _, val := range inMap {
val(in)
}
}
...
do[mod.Thing1](&mod.Thing1{}, mod.ModThing1)
当然问题是 go 不允许这样做,因为映射值的类型与 mod.ModThing1 值类型不同。 'func(in *T))' 与 'mod.T1'
无论如何让这个工作?
【问题讨论】: