婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > golang基礎(chǔ)之Interface接口的使用

golang基礎(chǔ)之Interface接口的使用

熱門標(biāo)簽:釘釘有地圖標(biāo)注功能嗎 濱州自動(dòng)電銷機(jī)器人排名 汕頭小型外呼系統(tǒng) 鄭州亮點(diǎn)科技用的什么外呼系統(tǒng) 浙江高頻外呼系統(tǒng)多少錢一個(gè)月 黃岡人工智能電銷機(jī)器人哪個(gè)好 惠州電銷防封電話卡 阿里云ai電話機(jī)器人 建造者2地圖標(biāo)注

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

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

只要某個(gè)類型擁有該接口的所有方法簽名,就算實(shí)現(xiàn)該接口,無需顯示聲明實(shí)現(xiàn)了那個(gè)接口,這稱為structural Typing

package main
import "fmt"

type USB interface { //定義一個(gè)接口:方法的集合
  Name() string //Name方法,返回string
  Connect()   //Connect方法
}

type PhoneConnecter struct { //定義一個(gè)結(jié)構(gòu)
  name string //結(jié)構(gòu)包含一個(gè)字段
}

func (pc PhoneConnecter) Name() string { //為結(jié)構(gòu)定義一個(gè)方法,綁定接口
  return pc.name //該方法命名為接口內(nèi)的字段
} //返回結(jié)構(gòu)體字段

func (pc PhoneConnecter) Connect() { //定義結(jié)構(gòu)體另一個(gè)方法,與接口另一個(gè)方法綁定
  fmt.Println("Connect:", pc.name)
}
func main() {
  var a USB              //定義一個(gè)變量為USB接口類型
  a = PhoneConnecter{"PhoneConnecter"} //實(shí)例化一個(gè)結(jié)構(gòu)體,并賦值給變量(接口)USB
  a.Connect()             //接口調(diào)用其Connect方法,也是結(jié)構(gòu)方法
}

/*輸出
Connect: PhoneConnecter
*/

接口可以作為匿名嵌入其它接口,或嵌入到結(jié)構(gòu)中

package main
import "fmt"

type USB interface { //定義一個(gè)接口:方法的集合
  Name() string //Name方法,返回string
  Connecter   //嵌入Connecter接口,可以使用Connecter方法
}

type Connecter interface { //定義另一個(gè)接口 Connecter
  Connect() //包含一個(gè)接口方法:Connect
}
type PhoneConnecter struct { //定義一個(gè)結(jié)構(gòu)
  name string //結(jié)構(gòu)包含一個(gè)字段
}

func (pc PhoneConnecter) Name() string { //為結(jié)構(gòu)定義一個(gè)方法,綁定接口
  return pc.name //該方法命名為接口內(nèi)的字段
} //返回結(jié)構(gòu)體字段

func (pc PhoneConnecter) Connect() { //定義結(jié)構(gòu)體另一個(gè)方法,與接口另一個(gè)方法綁定
  fmt.Println("Connect:", pc.name)
}
func main() {
  var a USB              //定義一個(gè)變量為USB接口類型
  a = PhoneConnecter{"PhoneConnecter"} //實(shí)例化一個(gè)結(jié)構(gòu)體,并賦值給變量(接口)USB
  a.Connect()
  Disconnect(a) //接口調(diào)用其Connect方法,也是結(jié)構(gòu)方法
}

接口只是方法聲明,沒有實(shí)現(xiàn)調(diào)用,沒有字段,只能通過綁定的類型方法訪問

package main
import "fmt"

type USB interface { //定義一個(gè)接口:方法的集合
  Name() string //Name方法,返回string
  Connecter   //嵌入Connecter接口,可以使用Connecter方法
}

type Connecter interface { //定義另一個(gè)接口 Connecter
  Connect() //包含一個(gè)接口方法:Connect
}
type PhoneConnecter struct { //定義一個(gè)結(jié)構(gòu)
  name string //結(jié)構(gòu)包含一個(gè)字段
}

func (pc PhoneConnecter) Name() string { //為結(jié)構(gòu)定義一個(gè)方法,綁定接口
  return pc.name //該方法命名為接口內(nèi)的字段
} //返回結(jié)構(gòu)體字段

func (pc PhoneConnecter) Connect() { //定義結(jié)構(gòu)體另一個(gè)方法,與接口另一個(gè)方法綁定
  fmt.Println("Connected:", pc.name)
}
func main() {
  var a USB           //定義一個(gè)變量為USB接口類型
  a = PhoneConnecter{"htc M10"} //實(shí)例化一個(gè)結(jié)構(gòu)體,并賦值給變量(接口)USB
  a.Connect()
  Disconnect(a) //接口調(diào)用其Connect方法,也是結(jié)構(gòu)方法
}

func Disconnect(usb USB) {
  if pc, ok := usb.(PhoneConnecter); ok { //傳入結(jié)構(gòu)體,判斷賦值是否成功
    fmt.Println("Disconnected:", pc.name)
    return
  }
  fmt.Println("UNknown device.")
}

/*輸出
Connect: htc M10
Disconnect:htc M10
*/

go沒有像其他語(yǔ)言繼承,如python中的object表示元類,所有的類都繼承自object類,go通過接口也類似實(shí)現(xiàn)了此定義,因?yàn)橹灰硞€(gè)類型實(shí)現(xiàn)了某個(gè)接口的方法,我們就說此類實(shí)現(xiàn)了這個(gè)接口。 因?yàn)?type empty interface{} ---空接口沒有任何方法,所以可以理解為所有的接口都實(shí)現(xiàn)了空接口的方法(繼承)。

package main
import "fmt"

type USB interface { //定義一個(gè)接口:方法的集合
  Name() string //Name方法,返回string
  Connecter   //嵌入Connecter接口,可以使用Connecter方法
}

type Connecter interface { //定義另一個(gè)接口 Connecter
  Connect() //包含一個(gè)接口方法:Connect
}
type PhoneConnecter struct { //定義一個(gè)結(jié)構(gòu)
  name string //結(jié)構(gòu)包含一個(gè)字段
}

func (pc PhoneConnecter) Name() string { //為結(jié)構(gòu)定義一個(gè)方法,綁定接口
  return pc.name //該方法命名為接口內(nèi)的字段
} //返回結(jié)構(gòu)體字段

func (pc PhoneConnecter) Connect() { //定義結(jié)構(gòu)體另一個(gè)方法,與接口另一個(gè)方法綁定
  fmt.Println("Connected:", pc.name)
}
func main() {
  var a USB           //定義一個(gè)變量為USB接口類型
  a = PhoneConnecter{"htc M10"} //實(shí)例化一個(gè)結(jié)構(gòu)體,并賦值給變量(接口)USB
  a.Connect()
  Disconnect(a) //接口調(diào)用其Connect方法,也是結(jié)構(gòu)方法
}

# func Disconnect(usb interface{}) { //集成空接口,也可以實(shí)現(xiàn)
#  if pc, ok := usb.(PhoneConnecter); ok { //傳入結(jié)構(gòu)體,判斷賦值是否成功
#    fmt.Println("Disconnected:", pc.name)
#    return
#  }
#  fmt.Println("UNknown device.")
#  }

//通過switch判斷接口類型:type...switch用法
func Disconnect(usb interface{}) { //集成空接口,也可以實(shí)現(xiàn)
switch v := usb.(type) {
case PhoneConnecter:
  fmt.Println("Disconnected:", v.name)
default:
  fmt.Println("UNknown device.")
}
}

/*輸出
Connect: htc M10
Disconnect:htc M10
*/

接口間的轉(zhuǎn)換: 只有子類接口可以轉(zhuǎn)換為父類接口,因?yàn)楦割惤涌诎俗宇惤涌冢宇惤涌诳梢哉{(diào)用父類接口一部分接口方法

將對(duì)象賦值給接口是,會(huì)發(fā)生拷貝,而接口內(nèi)部存儲(chǔ)的是只想這個(gè)復(fù)制品的指針,也就意味著接口無法修改狀態(tài),也無法獲取指針。

...
func main() {
pc := PhoneConnecter{"ipad book pro"} //實(shí)例化一個(gè)結(jié)構(gòu)
var a Connecter            //定義a為接口變量
a = Connecter(pc)           //接口強(qiáng)制轉(zhuǎn)換
a.Connect()

pc.name = "Iphone 7"
a.Connect()
...

/*輸出
pc.name= "ipad book pro"  Connected: ipad book pro
pc.name = "Iphone 7"    Connected: ipad book pro
*/
}

只有當(dāng) 接口存儲(chǔ)的類型和對(duì)象都為nil時(shí),接口才等于nil

package main
import "fmt"

func main() {
  var a interface{}
  fmt.Println(a == nil)

  var p *int = nil
  a = p
  fmt.Println(a == nil)
}

/*輸出
true
false
*/

  1. 接口調(diào)用不會(huì)做Receiver的自動(dòng)轉(zhuǎn)換
  2. 接口同樣支持匿名字段的方法
  3. 接口也可以實(shí)現(xiàn)類似OOP(面向?qū)ο缶幊?中的多態(tài)
  4. 空接口可以作為任何類型數(shù)據(jù)的容器

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Golang 使用接口實(shí)現(xiàn)泛型的方法示例
  • golang分層測(cè)試之http接口測(cè)試入門教程
  • golang中interface接口的深度解析
  • 初步解讀Golang中的接口相關(guān)編寫方法
  • golang中接口對(duì)象的轉(zhuǎn)型兩種方式

標(biāo)簽:泰安 瀘州 駐馬店 昭通 晉中 阿壩 滄州 東營(yíng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang基礎(chǔ)之Interface接口的使用》,本文關(guān)鍵詞  golang,基礎(chǔ),之,Interface,接口,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang基礎(chǔ)之Interface接口的使用》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于golang基礎(chǔ)之Interface接口的使用的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    26uuu亚洲综合色欧美| 欧美性猛交xxxx黑人交| 九九**精品视频免费播放| 成人手机电影网| 日韩欧美国产三级| 一区二区三区中文在线| 色88888久久久久久影院野外| 日本一区二区三区高清不卡| 国产成人自拍网| 国产日韩精品一区二区三区| 精品一区二区三区在线播放| 欧美不卡视频一区| 国产伦精品一区二区三区免费迷 | 99久久精品免费| 亚洲精品成a人| 欧美精品亚洲一区二区在线播放| 麻豆精品一区二区综合av| 久久网这里都是精品| 91亚洲男人天堂| 香蕉影视欧美成人| www精品美女久久久tv| 色综合久久久久久久| 日韩va亚洲va欧美va久久| 久久久久久久久99精品| 91激情五月电影| 麻豆91在线播放免费| 中文字幕不卡的av| 在线不卡a资源高清| www.在线欧美| 激情综合色播激情啊| 中文字幕中文在线不卡住| 欧美高清视频一二三区| 99久久国产综合色|国产精品| 成人午夜视频在线| 亚洲国产aⅴ天堂久久| www国产亚洲精品久久麻豆| 91九色02白丝porn| 国产一区二区三区精品视频| 最新日韩在线视频| 欧美日韩dvd在线观看| 国产成人免费9x9x人网站视频| 午夜精品123| 国产欧美日韩亚州综合 | 成人av电影在线播放| 日本一区二区免费在线观看视频 | 久久麻豆一区二区| 日本v片在线高清不卡在线观看| 久久精品99国产国产精| 中文av一区二区| 国产一区二区三区免费播放| 亚洲国产一区在线观看| 91亚洲国产成人精品一区二三| 99久久精品一区| 4438x亚洲最大成人网| 国产精品乱码一区二区三区软件| 欧美日韩亚洲综合| 亚洲第一综合色| 国产精品你懂的在线欣赏| a级高清视频欧美日韩| 久久人人97超碰com| 欧美高清精品3d| 亚洲va国产va欧美va观看| 18成人在线视频| 亚洲蜜臀av乱码久久精品| 成人app下载| 精品国产伦一区二区三区免费 | 美女网站在线免费欧美精品| 日韩午夜av电影| 久久精品国产免费看久久精品| 亚洲午夜久久久| 色婷婷综合久久久久中文一区二区| 成人av动漫网站| 亚洲美女在线国产| 欧美精品三级日韩久久| 欧美亚洲日本国产| 日韩精品免费视频人成| 免费高清不卡av| 国产精品乱码一区二三区小蝌蚪| 中文字幕在线不卡| 欧美一区二区视频观看视频 | 久久国产精品一区二区| 国产婷婷一区二区| 欧美性生活久久| 欧美一级一级性生活免费录像| 国产成人精品一区二区三区四区| 国产在线国偷精品产拍免费yy| 国产精品久久久一本精品| 综合激情网...| 久久国产视频网| 亚洲嫩草精品久久| 国产成人精品免费看| 中文字幕亚洲区| 午夜激情久久久| 久久久美女艺术照精彩视频福利播放| 国产日韩在线不卡| 欧美中文一区二区三区| 欧美电影在哪看比较好| 国产99精品国产| 欧美xxxx在线观看| 国产精品短视频| 国产精品一区免费视频| 久久99国产精品免费| 国产高清精品在线| 91精品国产综合久久福利软件| 成人美女视频在线看| 91啪九色porn原创视频在线观看| 欧美无乱码久久久免费午夜一区| 国产一区二区三区四区五区美女 | jizzjizzjizz欧美| 日韩黄色免费网站| 91日韩一区二区三区| 国产成人一区在线| 欧美日韩综合在线免费观看| 不卡的av在线| 黄页网站大全一区二区| 91亚洲永久精品| 成人久久18免费网站麻豆| 日韩一区二区三区四区| 欧美日韩精品欧美日韩精品一综合| 精品乱人伦小说| 日韩免费观看2025年上映的电影 | 欧美日产国产精品| 91小视频免费观看| 久久精品亚洲一区二区三区浴池| 日韩色视频在线观看| 亚洲国产日日夜夜| 婷婷中文字幕一区三区| 亚洲欧美日韩小说| 99免费精品视频| av动漫一区二区| 国产精品乱人伦| 国产精品入口麻豆九色| 国产精品一二一区| 大白屁股一区二区视频| 国产亚洲人成网站| 亚洲人成精品久久久久久| 欧美日本在线一区| 青草国产精品久久久久久| 日韩av一级片| 日韩视频免费直播| 国产日本亚洲高清| 成人网男人的天堂| 色久综合一二码| 中文字幕字幕中文在线中不卡视频| 国产日韩在线不卡| 风间由美中文字幕在线看视频国产欧美 | 日韩一卡二卡三卡四卡| 亚洲午夜电影网| 美女视频黄久久| 国产欧美一区二区精品性| 国产精品五月天| 欧美主播一区二区三区| 欧美日韩国产影片| 蜜桃免费网站一区二区三区| 日韩精品一区二区三区中文不卡| 成人99免费视频| 欧美另类z0zxhd电影| 成av人片一区二区| 一区二区三区精品视频在线| 日本不卡在线视频| 久久女同性恋中文字幕| 亚洲欧美二区三区| 欧美一区二区三区婷婷月色| 国产精品视频九色porn| 欧美日韩免费观看一区二区三区 | 在线观看91视频| 亚洲乱码国产乱码精品精的特点 | 精品国内二区三区| 亚洲精品中文字幕乱码三区| 在线观看亚洲精品视频| 日韩一级高清毛片| 国产成人一级电影| 94-欧美-setu| 精品一区二区三区香蕉蜜桃| 欧美午夜精品免费| 国产一区欧美一区| 日韩欧美中文字幕一区| 波多野结衣的一区二区三区| 久久久另类综合| 精品国产乱码久久久久久久 | 中文字幕va一区二区三区| 欧美日韩国产综合一区二区 | 日韩欧美国产午夜精品| 日韩av不卡在线观看| 日韩欧美国产不卡| 91久久精品一区二区三区| 亚洲男人天堂av| 99久久精品一区二区| 国产精品成人一区二区艾草| 国产a久久麻豆| 成人激情图片网| 欧美精品一区二区三区很污很色的| 天堂一区二区在线| 欧美一区二区在线不卡| 亚洲第一福利一区| 一区二区三国产精华液| 91丝袜国产在线播放| 成人av在线资源| 久久精品夜夜夜夜久久| 久久久久久电影|