我有一个返回匿名结构的函数。生成此函数,因此我无法更改代码或为返回值创建类型。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
素胚勾勒不出你
TA贡献1827条经验 获得超9个赞
我可以在不手动定义 ReturnTypeOfFoo 类型的情况下执行此操作吗?
不,因为...
我可以在foo()上做一些反思吗?
不。不能在编译时使用反射。
- 2 回答
- 0 关注
- 93 浏览
添加回答
举报
0/150
提交
取消