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中文网其他相关文章!

本文演示了创建模拟和存根进行单元测试。 它强调使用接口,提供模拟实现的示例,并讨论最佳实践,例如保持模拟集中并使用断言库。 文章

本文探讨了GO的仿制药自定义类型约束。 它详细介绍了界面如何定义通用功能的最低类型要求,从而改善了类型的安全性和代码可重复使用性。 本文还讨论了局限性和最佳实践

本文使用跟踪工具探讨了GO应用程序执行流。 它讨论了手册和自动仪器技术,比较诸如Jaeger,Zipkin和Opentelemetry之类的工具,并突出显示有效的数据可视化

本文讨论了GO的反思软件包,用于运行时操作代码,对序列化,通用编程等有益。它警告性能成本,例如较慢的执行和更高的内存使用,建议明智的使用和最佳

本文讨论了GO中使用表驱动的测试,该方法使用测试用例表来测试具有多个输入和结果的功能。它突出了诸如提高的可读性,降低重复,可伸缩性,一致性和A

本文讨论了通过go.mod,涵盖规范,更新和冲突解决方案管理GO模块依赖关系。它强调了最佳实践,例如语义版本控制和定期更新。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

SublimeText3 Linux新版
SublimeText3 Linux最新版