1 回答
TA贡献1864条经验 获得超2个赞
您可以创建一个通用构造函数,它接受一个用于“集合”的函数,然后将其传递给您的mapCollector结构。
这看起来像这样:
func MakeUserMapCollector[K comparable, V any](collect func(result V) K) *mapCollector[K, V] {
return &mapCollector[K, V]{
GetKey: collect,
}
}
然后你可以用你的类型作为类型参数和你的“集合”函数调用构造函数:
mc := MakeUserMapCollector[UserId, User](func(result User) UserId { return result.GetId() })
完整示例(Go Playground):
package main
import (
"fmt"
)
type mapCollector[K comparable, V any] struct {
GetKey func(result V) K
}
func (m mapCollector[K, V]) Collect(result V) K {
return m.GetKey(result)
}
type UserId string
type User struct {
Id UserId
}
func (u User) GetId() UserId {
return u.Id
}
func MakeUserMapCollector[K comparable, V any](collect func(result V) K) *mapCollector[K, V] {
return &mapCollector[K, V]{
GetKey: collect,
}
}
func main() {
u := User{
Id: "12",
}
mc := MakeUserMapCollector[UserId, User](func(result User) UserId { return result.GetId() })
fmt.Println(mc.Collect(u))
}
- 1 回答
- 0 关注
- 100 浏览
添加回答
举报