// code_21_struct_interface_firsttime project main.go
package main
import (
"fmt"
)
/*
1)接口interface是一個自定義類型,接口類型具體描述了一系列方法的集合。
2)接口類型是一種抽象的類型,它不會暴露出它代表的對象的內部值的結構和這個對象支持的基礎操作的結合,
他們只會展示出他們自己的方法。
因此接口類型不能將其實例化。
3)Go通過接口實現了鴨子類型(duck-typing)
*/
type Humaner interface {
SayHi()
//1)一般以er結尾
//2)接口只有方法聲明,沒有實現,沒有數據字段
//3)接口可以匿名嵌入其他接口,或嵌入到結構中
}
type Student struct {
name string
score float64
}
//Student實現SayHi()方法
func (s *Student) SayHi() {
fmt.Printf("Student[%s,%f] say hi!!!\n", s.name, s.score)
}
type Teacher struct {
name string
group string
}
func (t *Teacher) SayHi() {
fmt.Printf("Teacher[%s,%s] say hi!!!\n", t.name, t.group)
}
type MyStr string
func (str MyStr) SayHi() {
fmt.Printf("MyStr[%s] say hi!", str)
}
func WhoSayHi(i Humaner) {
i.SayHi()
}
func main() {
//接口的實現:1)接口是用來定義行為的類型。
//2)這些被定義的行為不由接口直接實現,而是通過方法由用戶定義的類型實現。
//3)一個實現了這些方法的具體類型是這個接口類型的實例。
//4)如果用戶定義的類型實現了某個接口類型聲明的一組方法,那么這個用戶定義的類型的值就可以賦給這個接口類型的值。
//這個賦值會把用戶定義的類型的值存入接口類型的值。
s := &Student{"ck_god", 88.88}
t := &Teacher{"god_girl", "computer_programmer"}
var tmp MyStr = "字符對象"
s.SayHi()
t.SayHi()
tmp.SayHi()
fmt.Println("\n==============\n")
//多態(tài)--鴨子模型,調用同一接口,不同表現
WhoSayHi(s)
WhoSayHi(t)
WhoSayHi(tmp)
fmt.Println("\n==============\n")
x := make([]Humaner, 3)
x[0], x[1], x[2] = s, t, tmp
for _, value := range x {
value.SayHi()
}
fmt.Println("\n==============\n")
}
運行結果:
創(chuàng)新互聯(lián)主營伊川網站建設的網絡公司,主營網站建設方案,重慶APP軟件開發(fā),伊川h5小程序開發(fā)搭建,伊川網站營銷推廣歡迎伊川等地區(qū)企業(yè)咨詢
Student[ck_god,88.880000] say hi!!!
Teacher[god_girl,computer_programmer] say hi!!!
MyStr[字符對象] say hi!
==============
Student[ck_god,88.880000] say hi!!!
Teacher[god_girl,computer_programmer] say hi!!!
MyStr[字符對象] say hi!
==============
Student[ck_god,88.880000] say hi!!!
Teacher[god_girl,computer_programmer] say hi!!!
MyStr[字符對象] say hi!
==============
當前文章:Go中interface接口初體驗之參數傳遞的鴨子形態(tài)
當前URL:http://jinyejixie.com/article24/ipihce.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、Google、、網站制作、App開發(fā)、網站設計
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)