首页 > 后端开发 > Golang > Go 接口应该直接暴露数据还是通过 Getter 和 Setter 暴露数据?

Go 接口应该直接暴露数据还是通过 Getter 和 Setter 暴露数据?

Patricia Arquette
发布: 2024-12-09 15:25:11
原创
943 人浏览过

Should Go Interfaces Expose Data Directly or Through Getters and Setters?

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 后面有几个优点。

  • 封装:它防止直接修改数据,强制执行受控访问和更改。
  • 可扩展性:围绕属性访问添加逻辑的能力允许在不破坏 API 的情况下进行未来的增强。
  • 类型一致性:使用接口返回对象可确保类型一致性,无论底层实现细节如何.

注意事项和注意事项

  • 过度使用:避免过度使用 getter 和 setter,因为它会引入不必要的复杂性并妨碍可读性。
  • 实现注意事项:Go 中的接口可以在不导入的情况下实现定义包,返回结构时可能导致循环导入。
  • API 演变:选择数据暴露消除了对底层数据结构进行向后兼容更改的灵活性。

以上是Go 接口应该直接暴露数据还是通过 Getter 和 Setter 暴露数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板