?# 11.5 測(cè)試一個(gè)值是否實(shí)現(xiàn)了某個(gè)接口
這是 11.3 類型斷言中的一個(gè)特例:假定 v 是一個(gè)值,然后我們想測(cè)試它是否實(shí)現(xiàn)了 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 函數(shù)就是如此檢測(cè)類型是否可以打印自身的。
接口是一種契約,實(shí)現(xiàn)類型必須滿足它,它描述了類型的行為,規(guī)定類型可以做什么。接口徹底將類型能做什么,以及如何做分離開(kāi)來(lái),使得相同接口的變量在不同的時(shí)刻表現(xiàn)出不同的行為,這就是多態(tài)的本質(zhì)。
編寫(xiě)參數(shù)是接口變量的函數(shù),這使得它們更具有一般性。
使用接口使代碼更具有普適性。
標(biāo)準(zhǔn)庫(kù)里到處都使用了這個(gè)原則,如果對(duì)接口概念沒(méi)有良好的把握,是不可能理解它是如何構(gòu)建的。
在接下來(lái)的章節(jié)中,我們會(huì)討論兩個(gè)重要的例子,試著去深入理解它們,這樣你就可以更好的應(yīng)用上面的原則。