2 回答
TA贡献1804条经验 获得超2个赞
Go 作者根据需要定义接口。它们没有定义用于填充可能方法网格的接口。此策略有助于保持标准库小而简单。
我认为他们的结论是几乎不需要 RuneWriter 接口,因为他们在标准包或他们维护的其他包中不需要它。
Go 团队之外没有对界面的需求。问题跟踪器、邮件列表或 irc 频道的可用记录历史记录上没有对接口的请求。
问题中引用的其他接口用于标准包或Go作者维护的其他包。
您可以在自己的包或代码中定义接口。这是一个非常有用的功能,对于 Go 来说有些独特。
TA贡献1812条经验 获得超5个赞
只是 Be Bop 答案的一个小补充:
接口对于定义通用函数很有用。例如,func f(foo interface { Foo() })
声明诸如“我是函数 f,如果你给我一些我可以使用 Foo() 的东西,我会做一份合适的工作。”
现在考虑像RuneScanner
. ARuneScanner
提供了非平凡的方法,尤其是UnreadRune
“低级”的东西不能轻易模拟的方法。
将一个什么RuneWriter
接口是很好的?定义一个函数func g(rw RuneWriter)
,它宣布自己为“给我一些我可以写符文的东西,我会做我的工作!” ? 但是没有真正的需要,因为这可以通过标准方式简单地模拟:将其定义为func g(r io.Writer)
并在fmt.Fprintf(r ...)
内部使用。如果你想写符文,你必须有能力写 1 到 6 (?) 个字节,这就是 anio.Writer
提供的。所以不需要一个RuneWriter
.
通过引入 ,它会使代码更具可读性或更安全RuneWriter
吗?可能不是:一个函数func g(rw RuneWriter)
明确声明它只希望将符文写入其参数。这很好,但对编写更好的程序没有真正的帮助。一个符文是 1 到 6 个字节,唯一的附加承诺g
是“写入我的参数的任何内容都将是有效的 UTF-8 编码流”。这是一个非常肤浅的承诺。
- 2 回答
- 0 关注
- 184 浏览
添加回答
举报