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 關注
- 121 瀏覽
添加回答
舉報