2 回答

TA貢獻1804條經驗 獲得超2個贊
Go 作者根據需要定義接口。它們沒有定義用于填充可能方法網格的接口。此策略有助于保持標準庫小而簡單。
我認為他們的結論是幾乎不需要 RuneWriter 接口,因為他們在標準包或他們維護的其他包中不需要它。
Go 團隊之外沒有對界面的需求。問題跟蹤器、郵件列表或 irc 頻道的可用記錄歷史記錄上沒有對接口的請求。
問題中引用的其他接口用于標準包或Go作者維護的其他包。
您可以在自己的包或代碼中定義接口。這是一個非常有用的功能,對于 Go 來說有些獨特。

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 編碼流”。這是一個非常膚淺的承諾。
- 2 回答
- 0 關注
- 216 瀏覽
添加回答
舉報