为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 Go 的 io 包中没有 RuneWriter 接口?

为什么 Go 的 io 包中没有 RuneWriter 接口?

Go
喵喔喔 2021-09-21 20:35:40
Go 的io包包含(除其他外)以下接口:type ByteReader interface {        ReadByte() (c byte, err error)}type ByteScanner interface {        ByteReader        UnreadByte() error}type ByteWriter interface {        WriteByte(c byte) error}type RuneReader interface {        ReadRune() (r rune, size int, err error)}type RuneScanner interface {        RuneReader        UnreadRune() error}但是没有RuneWriter界面:type RuneWriter interface {        WriteRune(r rune) (size int, err error)}有RuneWriter没有缺少的原因?
查看完整描述

2 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

Go 作者根据需要定义接口。它们没有定义用于填充可能方法网格的接口。此策略有助于保持标准库小而简单。

我认为他们的结论是几乎不需要 RuneWriter 接口,因为他们在标准包或他们维护的其他包中不需要它。

Go 团队之外没有对界面的需求。问题跟踪器、邮件列表或 irc 频道的可用记录历史记录上没有对接口的请求。

问题中引用的其他接口用于标准包或Go作者维护的其他包。

您可以在自己的包或代码中定义接口。这是一个非常有用的功能,对于 Go 来说有些独特。


查看完整回答
反对 回复 2021-09-21
?
慕雪6442864

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 编码流”。这是一个非常肤浅的承诺。


查看完整回答
反对 回复 2021-09-21
  • 2 回答
  • 0 关注
  • 184 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信