1. 程式人生 > 其它 >Go語言聖經閱讀-第十一週

Go語言聖經閱讀-第十一週

技術標籤:筆記

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種定義方式都是一樣的效果。方法順序的變化也沒有影響,唯一重要的就是這個集合裡面的方法。