栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么我们在Go的界面中不能拥有属性?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么我们在Go的界面中不能拥有属性?

沃尔克如此准确地在评论中留下了一个原因,他说: “接口仅封装行为。数据不是行为。”

另一个更容易理解的原因是:测试。当前,接口仅指定一组行为。假设我要测试一些需要

Writer
接口的代码。如果有些脚的开发人员实现了这样的接口:

type Writer interface {    F *os.File    Write(b []bytes) (int, error)}

然后,我需要一个具有文件指针的模拟类型(

nil
由于接口应该可以被我调用的代码使用,所以我可能无法将其保留在)。这本身就是可怕的。当然,创建临时文件很容易。

现在,这样的接口怎么样:

type ComplexInterface interface {   Engine *mypkg.SomeComplexType   Client *grpc.Client   // and so on}

我需要创建一个复杂的类型实例,而该实例又可能具有20个依赖关系……天哪,只知道对任何接口进行更改的代价可能是多么昂贵。如果

mypkg.SomeComplexType
发生变化,那么我很快就会发现另一个程序包中的测试开始中断,因为我已经创建了非常紧密的耦合。

所以是的:接口定义行为,添加属性会带来大量风险(接口为伪泛型,紧密耦合,维护地狱……)

无论哪种方式,如果您要在接口中使用 “属性” ,为何不直接编写以下代码:

type MyWriter interface {    File() *os.File    Write(b []bytes) (int, error)}

用属性代替吸气剂。任务完成。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/448051.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号