小言_互联网的博客

類型斷言和最佳實踐接收全部方法

372人阅读  评论(0)

package main

import “fmt”

//生命定義一個接口
type Usb interface {
//聲明了兩個沒有實現的方法
Start()
Stop()
}
type Phone struct {
name string
}

//讓phone 實現Usb接口的方法
func (p Phone) Start() {
fmt.Println(“手機開始工作…”)
}
func (p Phone) Stop() {
fmt.Println(“手機停止工作…”)
}

func(p Phone)Call(){
fmt.Println(“手機 打電話…”)
}

//讓Camera實現Usb接口的方法
type Camera struct {
//相機
name string
}

//讓Camera 實現Usb接口的方法
func (c Camera) Start() {
fmt.Println(“相機開始工作…”)
}
func (c Camera) Stop() {
fmt.Println(“相機停止工作…”)
}

//計算機
type Computer struct {
}

//編寫一個方法Working 方法,接收一個Usb接口類型變量
//只要是實現了Usb接口 所謂實現Usb接口,就是指實現了usb接口聲明所有方法)
func (c Computer) Working(usb Usb) {
//通過usb接口變量來調用Start和Stop方法
usb.Start()
//如果usb是指向Phone結構體變量,則還需要調用Call方法
//類型斷言…[注意體會]
if phone,ok:=usb.(Phone);ok==true{
phone.Call()
}
usb.Stop()
}
/*
基本介紹
變量(實例)具有多種形態,面嚮對象的第三大特徵,在GO語言,墮胎特徵是通過接口實現的。可以按照同意的接口來調用不同的實現。這時接口變量就呈現不同的形態。
快速入門
在前面的Usb接口案例,Usb usb,即可以接受手機變量,又可以接受相機變量,就體現了Usb接口多態特性[點明]

接口體現多臺特徵
1)多臺參數
在前面的Usb接口案例,Usb usb,即可以接受手機變量,又可以接受相機變量,就體現了Usb接口多態。
2)多態數組
演示一個案例:給Usb數組中,存放phone結構體和Camera結構體變量,Phone還有一個特有的方法call(),請遍歷Usb數組,如果是Phone變量,除了調用Usb接口生命的方法外,還需要調用Phone特有方法call
在前面的Usb接口案例,Usb usb,既可以接受手機變量,又可以接受相機變量,就體現了Usb接口墮胎特性。[點名]
編寫一個方法WORKing方法,接受一個Usb接口類型變量
//只要是實現了Usb接口(所謂實現Usb接口,就是指實現了Usb接口生命所有方法)
func(c Computer)Working(usb Usb){/usb 變量會根據傳入的實參,來判斷到底是Phone,還是Camera 通過usb接口變量來調用start和STOP方法usb接口變量就體現出墮胎的特點
usb Start()
usb Stop()

接口體現多臺的兩種方式
多臺參數
在前面的Usb接口案例,Usb usb,即可以接受手機變量,又可以接受相機變量,就體現了Usb接口,多態。

多態數組
/
func main(){
/

這樣的設計需求在Golang編程中也是會大量存在的,我曾經說故宮,一個程序就是一個世界,在現實世界存在的情況,在程序中也會出現,我們用程序來模擬一下前面的應用場景

接口(interface)
基本介紹
按順序,我們應該講解多態,但是在講解墮胎前,我們需要講解接口(interface),因爲在Golang中墮胎特性主要是通過接口來實現的。

*/
//測試
//先創建結構體變量
//定義一個Usb接口數組,可以存放Phone和Camera的結構體變量
//這裏就體現出多臺數組
var usbArr[3]Usb
usbArr[0]=Phone{“vivo”}
usbArr[1]=Phone{“小米”}
usbArr[2]=Camera{“尼康”}
//遍歷usbArr
//Phone海域一個特有的方法call(),請便利Usb數組,如果是Phone變量,
//除了調用Usb接口生命的方法外,還需要調用Phone特有方法call.=>類型斷言

//computer := Computer{}
//Phone := Phone{}
//Camera := Camera{}
//
////關鍵點
//computer.Working(Phone)
//computer.Working(Camera)
var computer Computer
for _, v:= range usbArr{
	computer.Working(v)
	fmt.Println()
}

fmt.Println("usbArr")

}


转载:https://blog.csdn.net/qq_43187004/article/details/101620124
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场