Go語言聖經閱讀-第十一週
阿新 • • 發佈:2021-02-08
技術標籤:筆記
7.2. 介面型別
介面型別具體描述了一系列方法的集合,一個實現了這些方法的具體型別是這個介面型別的例項。
io.Writer型別是用得最廣泛的介面之一,因為它提供了所有型別的寫入bytes的抽象,包括檔案型別,記憶體緩衝區,網路連結,HTTP客戶端,壓縮工具,雜湊等等。io包中定義了很多其它有用的介面型別。Reader可以代表任意可以讀取bytes的型別,Closer可以是任意可以關閉的值,例如一個檔案或是網路連結。(到現在你可能注意到了很多Go語言中單方法介面的命名習慣)
package io type Reader interface { Read(p []byte) (n int, err error) } type Closer interface { Close() error }
再往下看,我們發現有些新的介面型別通過組合已有的介面來定義。下面是兩個例子:
type ReadWriter interface {
Reader
Writer
}
type ReadWriteCloser interface {
Reader
Writer
Closer
}
上面用到的語法和結構內嵌相似,我們可以用這種方式以一個簡寫命名一個介面,而不用宣告它所有的方法。這種方式稱為介面內嵌。儘管略失簡潔,我們可以像下面這樣,不使用內嵌來宣告io.ReadWriter介面。
type ReadWriter interface { Read(p []byte) (n int, err error) Write(p []byte) (n int, err error) }
或者甚至使用一種混合的風格:
type ReadWriter interface {
Read(p []byte) (n int, err error)
Writer
}
上面3種定義方式都是一樣的效果。方法順序的變化也沒有影響,唯一重要的就是這個集合裡面的方法。