假设我有一个结构,应该作为上传的结果:

还会有其他类似的结构,它们都有一个字段Code和另一个称为Reason的结构。 因此,拥有类似通用接口(伪代码;此代码不起作用)的方法将很有趣:

因为我想调用一个提取一些公共字段的函数,但仅提取那些公共字段:

那么我将如何重写它以使其达到我的期望?

最好的祝福

您应该只能够在特定结构中嵌入具有公共字段的结构。

现场演示:http://play.golang.org/p/7Ju-r-yE1-

因此,在这种情况下,实际上不需要接口。只需将apiResult嵌入任何需要的结构中即可。

长话短说,Go接口不允许声明字段,因为从概念上讲,它们处理行为而不是数据。字段是数据。

有两种方法可以完成您想做的事情:

以下是一些有关如何实现此目的的示例:

此示例使用一个接口将APIResult字段公开为apiResponse接口的一部分:
http://play.golang.org/p/ONLzvqlP5R

这个使用接口将APIResult公开为包含以下内容的任何Result结构的一部分:
http://play.golang.org/p/NzxPHhDls_

关于这一点,您可以通过使APIResponse为具有公共字段的结构来使用组合来解决此问题,然后需要这些字段的任何其他结构都将导出APIResponse结构。

http://play.golang.org/p/k85vTJoFRn