# 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
函數就是如此檢測類型是否可以打印自身的。
接口是一種契約,實現類型必須滿足它,它描述了類型的行爲,規定類型可以做什麼。接口徹底將類型能做什麼,以及如何做分離開來,使得相同接口的變量在不同的時刻表現出不同的行爲,這就是多態的本質。
編寫參數是接口變量的函數,這使得它們更具有一般性。
使用接口使代碼更具有普適性。
標準庫裏到處都使用了這個原則,如果對接口概念沒有良好的把握,是不可能理解它是如何構建的。
在接下來的章節中,我們會討論兩個重要的例子,試着去深入理解它們,這樣你就可以更好的應用上面的原則。
鏈接
- 目錄
- 上一節:類型判斷:type-switch
- 下一節:使用方法集與接口