我可以为函数的返回类型起别名吗?

我有一个返回匿名结构的函数。生成此函数,因此我无法更改代码或为返回值创建类型。


func foo() struct {

    Prop int

} {

    result := new(struct {

        Prop int

    })

    result.Prop = 1

    return *result

}

在代码库的其他地方,我想定义一个函数,该函数接受返回类型的参数bar()foo()


func bar(arg ReturnTypeOfFoo) {

    // ...

}

我可以在不手动定义类型的情况下执行此操作吗?我可以做某种反思吗?ReturnTypeOfFoofoo()


慕丝7291255
浏览 127回答 2
2回答

吃鸡游戏

您可以使用与参数类型相同的匿名结构:bar()func bar(arg struct {    Prop int}) {    fmt.Printf("Received: %+v\n", arg)}则以下为有效代码:res := foo()bar(res)和输出(在Go Playground上尝试):Received: {Prop:1}这是可能的,因为如果所有参数都可分配给 的参数类型,并且 的匿名结构返回类型可分配给 的匿名结构参数,则调用是有效的。bar(res)bar()foo()bar()如果你需要它是动态的(例如,结果类型在重新生成时可能会改变),你可以使用go/parser包来解析生成的源,并使用相同的参数类型生成,习惯上在运行时执行。您应该使生成/更改的生成过程的这一部分,因此并且将保持同步。foo()bar()go generatefoofoobar

素胚勾勒不出你

我可以在不手动定义 ReturnTypeOfFoo 类型的情况下执行此操作吗?不,因为...我可以在foo()上做一些反思吗?不。不能在编译时使用反射。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go