如何使 return 的函数成为结构的泛型?
how to make a function to return a generic of struct?
我正在学习通用语言。
我有结构 User
和 Member
,我想为 return User
或 Member
创建一个函数。我怎样才能做到这一点?
编辑:我不想使用 interface{}
或 any
您可以使用 interface{}
结果类型,因此您可以 return 任何值(也不只是 User
和 Member
)。您可以使用 2 return 个值(Go 允许这样做)。或者使用 2 个不同的函数。
如果你想用泛型来做,这就是它的样子:
func getSomething[T User | Member]() T {
var result T
return result
}
getSomething()
有一个类型参数允许 User
或 Member
.
你可以这样称呼它:
fmt.Printf("%T\n", getSomething[User]())
fmt.Printf("%T\n", getSomething[Member]())
哪些输出(在 Go Playground 上尝试):
main.User
main.Member
interface{}
一直是 Go 中的一个眼中钉 - 所以 Go 1.18
(具有泛型支持)你现在可以对任何类型使用新关键字 any
:
func myFunc[T any](in T) (out T) {
// do stuff
return
}
或者您可以使用目标类型子集作为@icza 概述User | Member
我正在学习通用语言。
我有结构 User
和 Member
,我想为 return User
或 Member
创建一个函数。我怎样才能做到这一点?
编辑:我不想使用 interface{}
或 any
您可以使用 interface{}
结果类型,因此您可以 return 任何值(也不只是 User
和 Member
)。您可以使用 2 return 个值(Go 允许这样做)。或者使用 2 个不同的函数。
如果你想用泛型来做,这就是它的样子:
func getSomething[T User | Member]() T {
var result T
return result
}
getSomething()
有一个类型参数允许 User
或 Member
.
你可以这样称呼它:
fmt.Printf("%T\n", getSomething[User]())
fmt.Printf("%T\n", getSomething[Member]())
哪些输出(在 Go Playground 上尝试):
main.User
main.Member
interface{}
一直是 Go 中的一个眼中钉 - 所以 Go 1.18
(具有泛型支持)你现在可以对任何类型使用新关键字 any
:
func myFunc[T any](in T) (out T) {
// do stuff
return
}
或者您可以使用目标类型子集作为@icza 概述User | Member