我有一个采用泛型类型的函数,应该返回一个始终返回指针的函数。也就是说,如果你传递给它一个非指针类型,它应该返回一个指向该类型的指针,如果你传递给它一个指针类型,它应该返回相同的类型。我不想使用reflect.New,因为它是一个性能关键型应用程序。
我不介意在返回工厂函数的函数中使用反射,但理想情况下甚至不在那里。
这就是我想要做的:
package main
import (
"fmt"
"reflect"
)
type Ptr[T any] interface {
*T
}
func makeNewA[T Ptr[U], U any]() any {
return new(U)
}
func makeNewB[T any]() any {
return new(T)
}
func makeNew[T any](v T) func() any {
if reflect.TypeOf(v).Kind() == reflect.Ptr {
return makeNewA[T] // <-- error: T does not match *U
} else {
return makeNewB[T]
}
}
type Foo struct{}
func main() {
make1 := makeNew(Foo{})
make2 := makeNew(&Foo{})
// should both return &Foo{}
fmt.Println(make1())
fmt.Println(make2())
}
阿波罗的战车
相关分类