我正在尝试使用 Go 泛型来编写一个函数来减少我们代码中的一些样板 if/else 块。我想出了一些适用于单个类型参数的东西,如下所示:
func valueOrNil[T *int](value T) any {
if value == nil {
return nil
}
return *value
}
虽然这很好用,但它并不是很有用,因为它只允许*int, 并且我希望这段代码适用于任何原始类型。我试图扩展它以支持第二种类型,如下所示:
func valueOrNil[T *int | *uint](value T) any {
if value == nil {
return nil
}
return *value
}
但是,此变体因编译器错误而失败:
invalid operation: pointers of value (variable of type T constrained by *int|*uint) must have identical base types
谁能发现我在这里做错了什么,或者只是“不支持”这样的事情?
隔江千里
www说