亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Golang > 正文

golang基礎之Interface接口的使用

2020-04-01 18:55:56
字體:
來源:轉載
供稿:網友

接口是一個或多個方法簽名名的集合,定義方式如下

type Interface_Name interface { method_a() string method_b() int .... } 

只要某個類型擁有該接口的所有方法簽名,就算實現該接口,無需顯示聲明實現了那個接口,這稱為structural Typing

package mainimport "fmt"type USB interface { //定義一個接口:方法的集合  Name() string //Name方法,返回string  Connect()   //Connect方法}type PhoneConnecter struct { //定義一個結構  name string //結構包含一個字段}func (pc PhoneConnecter) Name() string { //為結構定義一個方法,綁定接口  return pc.name //該方法命名為接口內的字段} //返回結構體字段func (pc PhoneConnecter) Connect() { //定義結構體另一個方法,與接口另一個方法綁定  fmt.Println("Connect:", pc.name)}func main() {  var a USB              //定義一個變量為USB接口類型  a = PhoneConnecter{"PhoneConnecter"} //實例化一個結構體,并賦值給變量(接口)USB  a.Connect()             //接口調用其Connect方法,也是結構方法}/*輸出Connect: PhoneConnecter*/

接口可以作為匿名嵌入其它接口,或嵌入到結構中

package mainimport "fmt"type USB interface { //定義一個接口:方法的集合  Name() string //Name方法,返回string  Connecter   //嵌入Connecter接口,可以使用Connecter方法}type Connecter interface { //定義另一個接口 Connecter  Connect() //包含一個接口方法:Connect}type PhoneConnecter struct { //定義一個結構  name string //結構包含一個字段}func (pc PhoneConnecter) Name() string { //為結構定義一個方法,綁定接口  return pc.name //該方法命名為接口內的字段} //返回結構體字段func (pc PhoneConnecter) Connect() { //定義結構體另一個方法,與接口另一個方法綁定  fmt.Println("Connect:", pc.name)}func main() {  var a USB              //定義一個變量為USB接口類型  a = PhoneConnecter{"PhoneConnecter"} //實例化一個結構體,并賦值給變量(接口)USB  a.Connect()  Disconnect(a) //接口調用其Connect方法,也是結構方法}

接口只是方法聲明,沒有實現調用,沒有字段,只能通過綁定的類型方法訪問

package mainimport "fmt"type USB interface { //定義一個接口:方法的集合  Name() string //Name方法,返回string  Connecter   //嵌入Connecter接口,可以使用Connecter方法}type Connecter interface { //定義另一個接口 Connecter  Connect() //包含一個接口方法:Connect}type PhoneConnecter struct { //定義一個結構  name string //結構包含一個字段}func (pc PhoneConnecter) Name() string { //為結構定義一個方法,綁定接口  return pc.name //該方法命名為接口內的字段} //返回結構體字段func (pc PhoneConnecter) Connect() { //定義結構體另一個方法,與接口另一個方法綁定  fmt.Println("Connected:", pc.name)}func main() {  var a USB           //定義一個變量為USB接口類型  a = PhoneConnecter{"htc M10"} //實例化一個結構體,并賦值給變量(接口)USB  a.Connect()  Disconnect(a) //接口調用其Connect方法,也是結構方法}func Disconnect(usb USB) {  if pc, ok := usb.(PhoneConnecter); ok { //傳入結構體,判斷賦值是否成功    fmt.Println("Disconnected:", pc.name)    return  }  fmt.Println("UNknown device.")}/*輸出Connect: htc M10Disconnect:htc M10*/

go沒有像其他語言繼承,如python中的object表示元類,所有的類都繼承自object類,go通過接口也類似實現了此定義,因為只要某個類型實現了某個接口的方法,我們就說此類實現了這個接口。 因為 type empty interface{} ---空接口沒有任何方法,所以可以理解為所有的接口都實現了空接口的方法(繼承)。

package mainimport "fmt"type USB interface { //定義一個接口:方法的集合  Name() string //Name方法,返回string  Connecter   //嵌入Connecter接口,可以使用Connecter方法}type Connecter interface { //定義另一個接口 Connecter  Connect() //包含一個接口方法:Connect}type PhoneConnecter struct { //定義一個結構  name string //結構包含一個字段}func (pc PhoneConnecter) Name() string { //為結構定義一個方法,綁定接口  return pc.name //該方法命名為接口內的字段} //返回結構體字段func (pc PhoneConnecter) Connect() { //定義結構體另一個方法,與接口另一個方法綁定  fmt.Println("Connected:", pc.name)}func main() {  var a USB           //定義一個變量為USB接口類型  a = PhoneConnecter{"htc M10"} //實例化一個結構體,并賦值給變量(接口)USB  a.Connect()  Disconnect(a) //接口調用其Connect方法,也是結構方法}# func Disconnect(usb interface{}) { //集成空接口,也可以實現#  if pc, ok := usb.(PhoneConnecter); ok { //傳入結構體,判斷賦值是否成功#    fmt.Println("Disconnected:", pc.name)#    return#  }#  fmt.Println("UNknown device.")#  }//通過switch判斷接口類型:type...switch用法func Disconnect(usb interface{}) { //集成空接口,也可以實現switch v := usb.(type) {case PhoneConnecter:  fmt.Println("Disconnected:", v.name)default:  fmt.Println("UNknown device.")}}/*輸出Connect: htc M10Disconnect:htc M10*/

接口間的轉換: 只有子類接口可以轉換為父類接口,因為父類接口包含了子類接口,子類接口可以調用父類接口一部分接口方法

將對象賦值給接口是,會發生拷貝,而接口內部存儲的是只想這個復制品的指針,也就意味著接口無法修改狀態,也無法獲取指針。

...func main() {pc := PhoneConnecter{"ipad book pro"} //實例化一個結構var a Connecter            //定義a為接口變量a = Connecter(pc)           //接口強制轉換a.Connect()pc.name = "Iphone 7"a.Connect().../*輸出pc.name= "ipad book pro"  Connected: ipad book propc.name = "Iphone 7"    Connected: ipad book pro*/}

只有當 接口存儲的類型和對象都為nil時,接口才等于nil

package mainimport "fmt"func main() {  var a interface{}  fmt.Println(a == nil)  var p *int = nil  a = p  fmt.Println(a == nil)}/*輸出truefalse*/
  1. 接口調用不會做Receiver的自動轉換
  2. 接口同樣支持匿名字段的方法
  3. 接口也可以實現類似OOP(面向對象編程)中的多態
  4. 空接口可以作為任何類型數據的容器

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人欧美一区二区三区在线湿哒哒| 成人动漫网站在线观看| 久久久精品国产亚洲| **欧美日韩vr在线| 亚洲最大成人在线| 亚洲人成欧美中文字幕| 77777少妇光屁股久久一区| 亚洲天堂av在线免费观看| 国产精品久久97| 亚洲国产成人在线播放| 91亚洲精品久久久久久久久久久久| 精品亚洲一区二区三区在线观看| 色偷偷av一区二区三区乱| 日韩av毛片网| 777午夜精品福利在线观看| 亚洲欧美精品suv| 91视频国产高清| 91禁外国网站| 日韩亚洲欧美中文高清在线| 亚洲一区中文字幕| 8050国产精品久久久久久| 在线观看日韩欧美| 亚洲国产第一页| 97精品国产97久久久久久春色| 国产精品国产亚洲伊人久久| 欧美精品一区二区三区国产精品| 亚洲色图校园春色| 国产aⅴ夜夜欢一区二区三区| 精品av在线播放| 国产欧美日韩中文字幕| 日韩大陆毛片av| 91在线观看免费高清| 国产精品爱久久久久久久| 亚洲在线第一页| 亚洲一区二区福利| 91亚洲国产成人精品性色| 亚洲精品资源在线| 国产经典一区二区| 亚洲国产精品大全| 一区二区三区回区在观看免费视频| 久久国产精品免费视频| 91av在线播放视频| 国产精品九九久久久久久久| 青青青国产精品一区二区| 欧美中文字幕在线播放| 国内自拍欧美激情| 国产成人亚洲综合青青| 亚洲欧美中文日韩在线v日本| 久久精品久久精品亚洲人| 国产精品专区h在线观看| 国内自拍欧美激情| 日韩在线免费高清视频| 久久夜色精品国产亚洲aⅴ| 中文字幕亚洲国产| 久久成人在线视频| 国产精国产精品| 日韩成人性视频| 日韩欧亚中文在线| 欧美激情在线有限公司| 国产精品女人久久久久久| 亚洲午夜国产成人av电影男同| 欧美日韩国产二区| 精品久久久av| 亚洲视频在线免费观看| 国产成人鲁鲁免费视频a| 亚洲第一网中文字幕| 欧美日韩色婷婷| 精品一区二区三区四区在线| 亚洲第一区中文99精品| 亚洲精品久久久久久久久久久久| 国产亚洲精品久久久| 亚洲风情亚aⅴ在线发布| 久久精品视频亚洲| 国产精品揄拍500视频| 精品久久久久久久大神国产| 97视频免费在线观看| 亚洲国产精品一区二区久| 最近2019年日本中文免费字幕| 中文字幕日韩高清| 久久99亚洲热视| 8x拔播拔播x8国产精品| 久久久亚洲影院| 日韩av色在线| 久久亚洲综合国产精品99麻豆精品福利| 欧美成人精品在线| 成人午夜激情网| 成人欧美一区二区三区在线湿哒哒| 亚洲国产精久久久久久| 亚洲国产精品久久精品怡红院| 欧美国产日本在线| 97视频网站入口| 久久精品人人做人人爽| 国产精品一区电影| 深夜福利日韩在线看| 日韩精品免费一线在线观看| 在线视频日本亚洲性| 日本精品一区二区三区在线播放视频| 久久久久久69| 亚洲精品久久久久久久久久久久久| 国产精品香蕉在线观看| 亚洲一区二区三区成人在线视频精品| 免费不卡欧美自拍视频| 成人激情在线播放| 日韩欧美在线国产| 九九久久精品一区| 成人精品视频在线| 国产偷亚洲偷欧美偷精品| 欧美性感美女h网站在线观看免费| 91影院在线免费观看视频| 国产精品黄色影片导航在线观看| 亚洲精品网站在线播放gif| 97精品一区二区视频在线观看| 国产91精品青草社区| 最近日韩中文字幕中文| 亚洲第一中文字幕| 亚洲影院色在线观看免费| 日韩三级成人av网| 日韩一区av在线| 日韩网站免费观看高清| 国产精品美女999| 91国偷自产一区二区三区的观看方式| 久久影院资源站| 欧美第一淫aaasss性| 欧美视频国产精品| 欧美成人精品在线| 懂色aⅴ精品一区二区三区蜜月| 欧美激情欧美激情| 亚洲xxxx做受欧美| 国产精品99久久久久久白浆小说| 中文字幕日韩精品在线观看| 亚洲激情中文字幕| 狠狠色香婷婷久久亚洲精品| 国产美女精品视频| 亚洲国产日韩欧美综合久久| 欧洲精品在线视频| 亚洲摸下面视频| 中日韩美女免费视频网站在线观看| 亚洲色图17p| 久久久精品欧美| 这里只有精品久久| 欧美大尺度电影在线观看| 久久亚洲精品一区二区| 国产精品美女www| 日韩精品久久久久久久玫瑰园| 国产精品黄色影片导航在线观看| 久久视频在线播放| 成人黄色免费在线观看| 最近2019中文字幕在线高清| 国产欧美一区二区白浆黑人| 国产亚洲人成a一在线v站| 国产专区欧美专区| www.日韩欧美| 日韩欧美成人免费视频| 色偷偷av一区二区三区| 欧美中文字幕第一页| 欧美精品在线网站| www.精品av.com| 国产亚洲精品久久久久动| 在线观看精品自拍私拍| 久热精品视频在线观看一区| 成人在线播放av| 91超碰caoporn97人人| 欧美黄色成人网| 成人av在线亚洲|