亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 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() 的東西,我會做一份合適的工作?!?/p>

現在考慮像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 關注
  • 216 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號