個人通俗解釋:不同於類的界門綱目科屬種,這種才是鴨子;而是凡是具有鴨子的功能,那就可以認為其是鴨子。
結合**層面大概是:並非得繼承介面(並非一定是鴨科,河鴨屬),而是乙個sruct只要實現了裡面的方法,就可以用這個介面進行呼叫(就是鴨子了)
func
main()
// 這裡對於cesggg()無所謂aaa實現其他的,只要實現了需要的介面就可以呼叫,亦即它就是鴨子
cesggg
(bbb)
}type aaa struct
type bbb inte***ce
type ccc inte***ce
func
cesggg
(bbb bbb)
func
(a aaa)bb(
)func
(a aaa)cc(
)
用大黃鴨解釋就是,有個鴨子介面,裡面有鴨子叫的方法
乙個鴨子struct實現了它,可以用鴨子介面呼叫
但是乙個狗子也實現了它,也可以用鴨子介面呼叫,那這個狗,他就是個鴨子
詳見下列**
// 定義乙個鴨子介面
type duck inte***ce
// 乙個函式,這個函式用來逗鴨子,需要傳入乙個鴨子
func
makefunofduck
(d duck)
// 真鴨子
type realduck struct
// 狗鴨子,會學鴨子叫的狗
type dogduck struct
func
(dogduck dogduck)
jiao
(s string
)func
(realduck realduck)
jiao
(s string
)func
main()
makefunofduck
(d)// 這個狗,可以鴨子叫,他就是個鴨子
d = dogduck
makefunofduck
(d) fmt.
println
("ces"
)ces()
}func
ces(
)}
這裡還涉及到一些介面使用方法
// 介面定義好一系列(共性)方法,
// 結構體只要實現介面裡的方法,即實現了這個介面,所有的方法都要實現才可以
type phone inte***ce
type mp4 inte***ce
// 多個介面組合,亦可以新增自己的方法
// 可以在使用的時候,自己結合大量功能,靈活性高
type smartphone inte***ce
type nokia struct
// 各自實現自己想要用的介面
func
(nk nokia)
msg(receiver string
)func
(nk nokia)
call
(receiver string
)// 使用者只需要實現方法就行,其他的都不用過問
// 實現了鴨子的叫,那就是鴨子
func
call
(receiver string
)func
msg(receiver string
)// 因為要被smartphone使用,所以還要實現另外的相關介面
func
playvideo
(videoname string
)func
videocall
(user string
)// 還可以輕鬆實現系統的介面
func
(nk nokia)
string()
string
func
string()
string
func
main()
var iphone smartphone
"steve"
} this is tom 's phone,是因為實現了string()
fmt.
printf
("%t %v\n"
,phone, phone)
fmt.
printf
("%t %v\n"
,iphone, iphone)
connectionwithcall
(phone,
"steve"
)connectionwithcall
(iphone,
"tom"
)connectionwithmsg
(phone,
"steve"
)connectionwithmsg
(iphone,
"tom"
)connectionwithvideo
(iphone,
"tom"
) iphone.
playvideo
("video")}
func
connectionwithcall
(p phone,u string
)func
connectionwithmsg
(p phone,u string
)func
connectionwithvideo
(p smartphone,u string
)
Go 語言介面
go 語言提供了另外一種資料型別即介面,它把所有的具有共性的方法定義在一起,任何其他型別只要實現了這些方法就是實現了這個介面。例項 定義介面 type inte ce name inte ce 定義結構體 type struct name struct 實現介面方法 func struct name...
Go語言 介面
介面代表一種呼叫契約,是多個方法宣告的集合。介面要實現的是做什麼,而不關心如何做。介面最常見的使用場景是對包外提供訪問,或預留擴充套件空間。go語言介面實現機制很簡潔,只要目標型別方法集內包含介面宣告的全部方法,就被視為實現了該介面,無需做顯示宣告,當然目標型別可實現多個介面。其實介面也是一中結構,...
Go語言 介面
在go語言中,乙個介面型別總是代表著某一種型別 即所有實現它的型別 的行為。乙個介面型別的宣告通常會包含關鍵字type 型別名稱 關鍵字inte ce以及由花括號包裹的若干方法宣告。示例如下 type animal inte ce注意,介面型別中的方法宣告是普通的方法宣告的簡化形式。它們只包括方法名...