没有数据的 Go 接口
在 Go 中,接口定义功能,但不定义数据。这意味着您无法在接口中指定实现该接口的任何结构所需的字段。因此,Go 中的接口主要用于表示行为,而不是用于数据表示。
使用嵌入式结构进行数据表示
但是,这是可能的使用嵌入式结构来模拟接口中的数据表示。通过将包含所需数据字段的结构嵌入到接口实现者中,您可以通过接口间接公开数据。
嵌入结构的示例
考虑以下示例:
type PersonProvider interface { GetPerson() *Person } type Person struct { Name string Age int64 } func (p *Person) GetPerson() *Person { return p }
这里,我们定义了一个接口 PersonProvider ,它代表任何能够提供 Person 的对象 价值。 Person 结构保存实际的数据字段。通过将 Person 嵌入到 PersonProvider 的实现者中,我们可以通过接口间接访问其数据。
嵌入式结构的优点和缺点
使用嵌入式结构具有以下优点:
但是,它也有一些限制:
替代方法
通过接口表示数据的另一种方法是显式使用方法来访问和修改数据。这种方法提供了更好的控制和灵活性,但可能涉及更多样板代码。
约定与灵活性
虽然使用嵌入式结构可能是一种有用的技术,但重要的是考虑 Go 约定并仔细权衡利弊。在某些情况下,直接在 API 中公开数据成员可能比引入抽象层更合适。
以上是在不直接定义数据字段的情况下,如何在 Go 接口中表示数据?的详细内容。更多信息请关注PHP中文网其他相关文章!