Go中interface接口初體驗(yàn)之參數(shù)傳遞的鴨子形態(tài)

// code_21_struct_interface_firsttime project main.go
package main

import (
    "fmt"
)

/*
    1)接口interface是一個(gè)自定義類型,接口類型具體描述了一系列方法的集合。

    2)接口類型是一種抽象的類型,它不會(huì)暴露出它代表的對(duì)象的內(nèi)部值的結(jié)構(gòu)和這個(gè)對(duì)象支持的基礎(chǔ)操作的結(jié)合,
    他們只會(huì)展示出他們自己的方法。
    因此接口類型不能將其實(shí)例化。

    3)Go通過(guò)接口實(shí)現(xiàn)了鴨子類型(duck-typing)
*/

type Humaner interface {
    SayHi()
    //1)一般以er結(jié)尾
    //2)接口只有方法聲明,沒(méi)有實(shí)現(xiàn),沒(méi)有數(shù)據(jù)字段
    //3)接口可以匿名嵌入其他接口,或嵌入到結(jié)構(gòu)中
}

type Student struct {
    name  string
    score float64
}

//Student實(shí)現(xiàn)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() {
    //接口的實(shí)現(xiàn):1)接口是用來(lái)定義行為的類型。
    //2)這些被定義的行為不由接口直接實(shí)現(xiàn),而是通過(guò)方法由用戶定義的類型實(shí)現(xiàn)。
    //3)一個(gè)實(shí)現(xiàn)了這些方法的具體類型是這個(gè)接口類型的實(shí)例。
    //4)如果用戶定義的類型實(shí)現(xiàn)了某個(gè)接口類型聲明的一組方法,那么這個(gè)用戶定義的類型的值就可以賦給這個(gè)接口類型的值。
    //這個(gè)賦值會(huì)把用戶定義的類型的值存入接口類型的值。

    s := &Student{"ck_god", 88.88}
    t := &Teacher{"god_girl", "computer_programmer"}
    var tmp MyStr = "字符對(duì)象"

    s.SayHi()
    t.SayHi()
    tmp.SayHi()
    fmt.Println("\n==============\n")

    //多態(tài)--鴨子模型,調(diào)用同一接口,不同表現(xiàn)
    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")
}

運(yùn)行結(jié)果:

創(chuàng)新互聯(lián)主營(yíng)伊川網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP軟件開(kāi)發(fā),伊川h5小程序開(kāi)發(fā)搭建,伊川網(wǎng)站營(yíng)銷推廣歡迎伊川等地區(qū)企業(yè)咨詢

Student[ck_god,88.880000] say hi!!!
Teacher[god_girl,computer_programmer] say hi!!!
MyStr[字符對(duì)象] say hi!
==============

Student[ck_god,88.880000] say hi!!!
Teacher[god_girl,computer_programmer] say hi!!!
MyStr[字符對(duì)象] say hi!
==============

Student[ck_god,88.880000] say hi!!!
Teacher[god_girl,computer_programmer] say hi!!!
MyStr[字符對(duì)象] say hi!
==============

當(dāng)前文章:Go中interface接口初體驗(yàn)之參數(shù)傳遞的鴨子形態(tài)
當(dāng)前URL:http://muchs.cn/article24/ipihce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、Google、網(wǎng)站制作、App開(kāi)發(fā)、網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)