如何使 return 的函数成为结构的泛型?

how to make a function to return a generic of struct?

我正在学习通用语言。 我有结构 UserMember,我想为 return UserMember 创建一个函数。我怎样才能做到这一点?

编辑:我不想使用 interface{}any

您可以使用 interface{} 结果类型,因此您可以 return 任何值(也不只是 UserMember)。您可以使用 2 return 个值(Go 允许这样做)。或者使用 2 个不同的函数。

如果你想用泛型来做,这就是它的样子:

func getSomething[T User | Member]() T {
    var result T
    return result
}

getSomething() 有一个类型参数允许 UserMember.

你可以这样称呼它:

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

https://go.dev/play/p/RGm6cl4ncqA?v=gotip