Go 中的函数接口
Go 接口主要用于定义功能而不是数据。虽然您可以在接口中定义方法,但无法指定必填字段。但是,有一些方法可以解决此限制并创建对数据进行建模的接口。
使用嵌入式结构模拟数据接口
一种方法是使用嵌入式结构。考虑一下您想要定义具有 Name 和 Age 字段的 Person 接口的示例:
type PersonProvider interface { GetPerson() *Person } type Person struct { Name string Age int64 }
现在,实现 PersonProvider 的结构可以嵌入 Person 并通过 GetPerson 方法公开其字段。
type Bob struct { FavoriteNumber int64 Person }
该技术提供了一种通过接口公开数据的方法,同时确保编译时类型安全。但是,需要注意的是,它仍然公开指针,允许直接访问数据。
公开数据属性的案例
虽然模拟技术是有效的,但它提出了这是否是最佳方法的问题。 Go 约定并不严格要求使用抽象来进行数据访问。有时公开公共数据属性更简单、更高效,尤其是在需要直接访问时。
但是,如果数据公开可能会使未来的更改变得复杂,那么明智的做法是考虑使用属性访问和修改的方法。这为发展底层数据结构提供了更大的灵活性,同时保持 API 兼容性。
Getters 和 Setters 的好处
将属性隐藏在 getters 和 setters 后面有几个优点。
注意事项和注意事项
以上是Go 接口应该直接暴露数据还是通过 Getter 和 Setter 暴露数据?的详细内容。更多信息请关注PHP中文网其他相关文章!