# 11.5 測試一個值是否實現了某個接口

這是 11.3 類型斷言中的一個特例:假定 v 是一個值,然後我們想測試它是否實現了 Stringer 接口,可以這樣做:

type Stringer interface {
    String() string
}

if sv, ok := v.(Stringer); ok {
    fmt.Printf("v implements String(): %s\n", sv.String()) // note: sv, not v
}

Print 函數就是如此檢測類型是否可以打印自身的。

接口是一種契約,實現類型必須滿足它,它描述了類型的行爲,規定類型可以做什麼。接口徹底將類型能做什麼,以及如何做分離開來,使得相同接口的變量在不同的時刻表現出不同的行爲,這就是多態的本質。

編寫參數是接口變量的函數,這使得它們更具有一般性。

使用接口使代碼更具有普適性。

標準庫裏到處都使用了這個原則,如果對接口概念沒有良好的把握,是不可能理解它是如何構建的。

在接下來的章節中,我們會討論兩個重要的例子,試着去深入理解它們,這樣你就可以更好的應用上面的原則。

鏈接

results matching ""

    No results matching ""