为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕丝7291255 2022-08-01 15:13:09
我有一个返回匿名结构的函数。生成此函数,因此我无法更改代码或为返回值创建类型。func foo() struct {    Prop int} {    result := new(struct {        Prop int    })    result.Prop = 1    return *result}在代码库的其他地方,我想定义一个函数,该函数接受返回类型的参数bar()foo()func bar(arg ReturnTypeOfFoo) {    // ...}我可以在不手动定义类型的情况下执行此操作吗?我可以做某种反思吗?ReturnTypeOfFoofoo()
查看完整描述

2 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

您可以使用与参数类型相同的匿名结构: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


查看完整回答
反对 回复 2022-08-01
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

我可以在不手动定义 ReturnTypeOfFoo 类型的情况下执行此操作吗?

不,因为...

我可以在foo()上做一些反思吗?

不。不能在编译时使用反射。


查看完整回答
反对 回复 2022-08-01
  • 2 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信