成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

go語言可以開發接口嗎

go語言可以開發接口。go語言中接口是一組方法的簽名,它是go語言中重要的組成部分,接口做的事情就好像是定義一個規范或者協議,各個實現方只要按照協議實現即可。go語言中使用interface關鍵字來定義接口,語法“type 接口類型名 interface{方法名1( 參數列表1 ) 返回值列表1 方法名2( 參數列表2 ) 返回值列表2…}”。

go語言可以開發接口嗎

php入門到就業線上直播課:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調試工具:點擊使用

本教程操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

接口對于我們來說應該是一個比較熟悉的概念,在各種開發語言中運用都非常的廣泛,對于像我們比較熟悉java的程序員來說對于接口就更加的親切,下面我們來看下在go語言中接口是怎么用,以及接口在日常開發中發揮的作用。

概念

go語言中接口是一組方法的簽名,它是go語言中重要的組成部分,接口做的事情就好像是定義一個規范或者協議,各個實現方只要按照協議實現即可。

接口是一種類型

接口類型是對其他類型行為的抽象和概括,不關心具體的實現細節,這種抽象的方式可以讓我們的函數變的更加靈活。

接口定義

type 接口類型名 interface{     方法名1( 參數列表1 ) 返回值列表1     方法名2( 參數列表2 ) 返回值列表2     … }
登錄后復制

在go語言中我們使用interface關鍵字來定義接口。

接口實現條件

如果一個任意類型T的方法集為一個接口類型的方法集的超集,則我們說類型T實現了該接口。

接口的實現在go語言中是隱式的,也就說兩個類型之間的實現關系不需要在代碼中體現出來,G哦語言中也沒有類似java中implements的關鍵字,Go編譯器將自動在需要的時候檢查兩個類型之間的實現關系。接口定義后,需要實現接口,調用方才能正確編譯通過并使用接口。

接口的實現需要遵循兩條規則才能讓接口可用:

1、接口的方法與實現接口的類型方法格式一致在類型中添加與接口簽名一致的方法就可以實現該方法。簽名包括方法中的名稱、參數列表、返回參數列表。也就是說,只要實現接口類型中的方法的名稱、參數列表、返回參數列表中的任意一項與接口要實現的方法不一致,那么接口的這個方法就不會被實現。

package main  import "fmt"  type Phone interface { 	Call() 	SendMessage() }  type HuaWei struct { 	Name  string 	Price float64 }  func (h *HuaWei) Call() { 	fmt.Printf("%s:可以打電話",h.Name) }  func (h *HuaWei) SendMessage() { 	fmt.Printf("%s:可以發送短信",h.Name) }  func main() {  	h := new(HuaWei) 	h.Name="華為" 	var phone Phone 	phone = h 	phone.SendMessage() }
登錄后復制

當類型無法實現接口時,編譯器會報錯:

a.函數名稱不一致導致的報錯

b.實現函數的方法簽名不一致導致的報錯

2、接口中所有方法均被實現當一個接口中有多個方法時,只有這些方法都被實現了,接口才能被正確編譯并使用

func (h *Xiaomi) Call() { 	fmt.Printf("%s:可以打電話",h.Name) }  func main() { 	h := new(Xiaomi) 	h.Name="小米" 	var phone Phone 	phone = h 	phone.SendMessage() }
登錄后復制

go語言可以開發接口嗎

當 小米 類型僅僅實現接口中的一個方法的時候,我們在使用的時候,編譯報錯。

類型與接口的關系

一個類型實現多個接口

一個類型可以實現多個接口,而接口之間彼此獨立,不知道對方的實現。

例如,狗既可以動,可以叫

package main  import "fmt"  type Move interface { 	move() } type Say interface { 	say() } type Dog struct { 	Name string }  func (d *Dog) move()  { 	fmt.Printf("%s會動n", d.Name) } func (d *Dog) say()  { 	fmt.Printf("%s會叫汪汪汪n", d.Name) }  func main() { 	var m Move 	var s  Say 	d:=&Dog{ 		Name: "旺財", 	} 	m = d 	s=d 	m.move() 	s.say() }
登錄后復制

多個類型實現同一個接口

Go語言中不同的類型還可以實現同一接口 首先我們定義一個Mover接口,它要求必須有一個move方法。

type Mover interface {     move() }
登錄后復制

例如狗可以動,汽車也可以動,可以使用如下代碼實現這個關系:

type dog struct {     name string }  type car struct {     brand string }  // dog類型實現Mover接口 func (d dog) move() {     fmt.Printf("%s會跑n", d.name) }  // car類型實現Mover接口 func (c car) move() {     fmt.Printf("%s速度70邁n", c.brand) }
登錄后復制

這個時候我們在代碼中就可以把狗和汽車當成一個會動的物體來處理了,不再需要關注它們具體是什么,只需要調用它們的move方法就可以了。

func main() {         var x Mover         var a = dog{name: "旺財"}         var b = car{brand: "保時捷"}         x = a         x.move()         x = b         x.move()     }
登錄后復制

空接口

空接口:interface{},不包含任何方法,正因為如此,任何類型都實現了空接口,所以空接口可以存儲任意類型的數據。

fmt 包下的 Print 系列函數,其參數大多是空接口類型,也可以說支持任意類型

func Print(a ...interface{}) (n int, err error) func Println(format string, a ...interface{}) (n int, err error) func Println(a ...interface{}) (n int, err error)
登錄后復制

空接口作為map的值

// 空接口作為map值     var studentInfo = make(map[string]interface{})     studentInfo["name"] = "李白"     studentInfo["age"] = 18     studentInfo["married"] = false     fmt.Println(studentInfo)
登錄后復制

類型推斷

空接口可以存儲任意類型的值,那我們如何獲取其存儲的具體數據呢?

接口值

一個接口的值(簡稱接口值)是由一個具體類型和具體類型的值兩部分組成的。

這兩部分分別稱為接口的動態類型和動態值。

想要判斷空接口中的值這個時候就可以使用類型斷言,其語法格式:

x.(T)
登錄后復制

其中:

  • x:表示類型為interface{}的變量

  • T:表示斷言x可能是的類型。

該語法返回兩個參數,第一個參數是x轉化為T類型后的變量,第二個值是一個布爾值,若為true則表示斷言成功,為false則表示斷言失敗。

func main() {     var x interface{}     x = "ms的go教程"     v, ok := x.(string)     if ok {         fmt.Println(v)     } else {         fmt.Println("類型斷言失敗")     } }
登錄后復制

上面的示例中如果要斷言多次就需要寫多個if判斷,這個時候我們可以使用switch語句來實現:

func justifyType(x interface{}) {     switch v := x.(type) {     case string:         fmt.Printf("x is a string,value is %vn", v)     case int:         fmt.Printf("x is a int is %vn", v)     case bool:         fmt.Printf("x is a bool is %vn", v)     default:         fmt.Println("unsupport type!")     } }
登錄后復制

因為空接口可以存儲任意類型值的特點,所以空接口在Go語言中的使用十分廣泛。

總結

關于接口需要注意的是,只有當有兩個或兩個以上的具體類型必須以相同的方式進行處理時才需要定義接口。不要為了接口而寫接口,那樣只會增加不必要的抽象,導致不必要的運行時損耗。

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
亚洲成在人线视AV| 伊人色综合视频一区二区三区| 亚洲A片成人无码久久精品色欲| 亚洲成A人一区二区三区| 野花新免费高清完整在线观看| 中文字幕色AV一区二区三区| IPHONE欧美高级| 国产AV无码专区亚洲AV琪琪| 韩国三级丰满少妇高潮| 老师黑色双开真丝旗袍| 亲孑伦视频一区二区三区视频| 色综合AV男人的天堂伊人| 亚洲AⅤ永久无码毛片牛牛影视 | 夫妇联欢会回不去的夜晚9集| 国产精品免费看久久久| 精品人妻系列无码人妻不卡| 拧花蒂尿用力按凸起喷水尿视频| 日韩欧美一区二区三区视频 | 国产精品青青青高清在线| 黑人巨大精品欧美久久| 牛鞭擦进少妇的下身| 特级欧美ZOOXX| 亚洲色大18成人网站WWW在线| 99国产精品永久免费视频| 国产AⅤ无码专区亚洲AV琪琪| 精品久久国产综合婷婷五月| 欧美性XXXXX极品少妇| 我被公么征服了HD中文字幕| 夜夜躁狠狠躁日日躁视频| 成年午夜免费AⅤ在线观看| 韩国电影办公室6免费完整版| 免费污站18禁的刺激| 天堂SV在线最新版在线| 亚洲综合精品香蕉久久网| 成年午夜免费韩国做受| 精品欧洲AV无码一区二区| 全部免费特黄特色大片| 亚洲AV成人永久网站www在线| 91精品人妻欧美一区二区三区| 国产高潮抽搐翻白眼在线播放| 巨粗进入警花哭喊求饶| 上面一个奶下面一个顶是什么字| 亚洲午夜无码久久| 丰满性熟妇ⅩXXOOOSEX| 久久理伦片琪琪电影院| 熟妇人妻中文字幕| 真实的国产乱ⅩXXX66小说| 国产AV无码专区亚汌A√| 巨人精品福利官方导航| 无码 制服 丝袜 国产 另类| 7777奇米四色眼影| 国产午夜精华无码网站| 欧美一级 片内射欧美乱强| 亚洲精品白浆高清久久久久久| 别揉我奶头~嗯~啊~动态图视频| 狠狠人妻熟妇av又粗又大| 人人妻人人澡人人爽人人老司机 | 成人精品视频一区二区| 久久久久久精品免费免费| 天堂√中文最新版在线中文| 337P日本欧洲亚洲大胆张筱雨| 国精产品一码二码三M| 日本漂亮妈妈7在观有限中子| 亚洲一区二区三区乱码AⅤ蜜桃| 国产97在线 | 欧美| 男生把手放进我内裤揉摸好爽 | ZZTT166.CCM黑料| 精品无人区卡卡卡卡卡二卡三乱码| 日日狠狠久久偷偷色综合96蜜桃| 一区二区三区欧美| 国产亚州精品女人久久久久久| 人妻丰满熟妇AⅤ无码无码区免费 人妻丰满熟妇AⅤ无码区在线电影 | 欧美XXXX黑人又粗又长| 亚洲国产精品久久久久婷婷软件| 非洲人与性动交CCOO| 浓毛BGMBGMBGM胖老太太| 亚洲欧美日韩国产精品一区 | wwwxxx日本黄色| 巨大黑人XXXXX高潮后处理| 亚洲AV无码一区二区三区网站 | 脱色摇床THERMO网站| FRYEE性欧美18 19| 久久综合亚洲色一区二区三区| 小拗女一区二区三区| 绯色AV一区二区三区在线高清| 欧美1卡2卡3卡4卡免费高清| 野花高清在线观看免费官网| 狠狠噜天天噜日日噜视频麻豆| 天天天天躁天天爱天天碰2018| ZLJZLJZLJ中国人水多多| 绿帽娇妻在卧室疯狂的呻吟 | 六个人玩我一个人| 亚洲 A V无 码免 费 成| 公交车上荫蒂添的好舒服的句子| 亲情会王芳高敏大团圆| 18禁美女黄网站色大片免费观看| 久久精品国产国产精品四凭| 亚洲AV怡红院AV男人的天堂| 国产伦精品一区二区三区免.费 | 人妻色欲AV无码专区精油按摩| 真人性囗交69图片| 久久亚洲男人第一AV网站| 亚洲人成人无码.WWW石榴| 国色天香精品一卡2卡3卡4| 无码一区二区三区AⅤ免费蜜桃视 无码一区二区三区AⅤ免费麻豆 | 天天摸天天碰成人免费视频| 番茄TODO社区免费看片| 日本在线观看母与子| 把腿张开我要cao死你在线观看 | 久久精品国产亚洲AV麻豆图片| 亚洲高清国产AV拍精品青青草原| 国产精品沙发系列| 午夜.DJ高清免费观看视频| 国产成人综合精品无码| 天天躁日日躁狠狠躁AV中文| 国产AV一区二区三区| 兽交ZOOSKOO| 国产AV无码专区亚洲AV漫画 | 国产精品乱码一区二区三区| 天堂√中文在线BT| 国产精品免费久久久久影院仙踪林 | 暴躁妹妹CSGO| 色欧美片视频在线观看| 村长用力挺进她的花苞啥电视| 日本又黄又爽GIF动态图| 大又大又粗又硬又爽少妇毛片 | 亚洲一码二码三码区别在哪| 精品熟妇无码av免费久久| 亚洲日本一线产区和二线产 | 亚洲午夜成人精品无码色欲| 精品无码人妻少妇久久久久久| 亚洲色成人网站WWW永久小说| 久久久国产精华液| 诱人的老师HD中字| 男吃奶玩乳尖高潮视频午夜I| 97久久超碰国产精品2021| 欧美性猛烈XXXX极品少妇| 波多野结衣AV电影在线观看| 色一情一乱一乱一区91Av| 国产极品美女高潮无套| 亚洲AV实录无码成人精品电影| 黑料不打烊吃瓜爆料| 亚洲欧美综合一区二区三区| 里面也请好好疼爱五集| 97夜夜澡人人爽人人| 日本少妇自慰高清喷浆 | 贪婪洞窟H5双修流攻略小说| 国产猛男GAY1069视频| 亚洲精品夜夜夜妓女网| 美女裸体无遮挡永久免费视频AP | 黑人GAY大长雕TUBE| 野花韩国视频免费高清3| 男生晚上睡不着想看B站| 成都私人家庭影院| 无码人妻丰满熟妇区BBBBXX| 护士被医生办公室狂玩| 伊人AV超碰伊人久久久| 欧洲无人区卡一卡二| 国产浮力第一页草草影院| 亚洲成A人片在线观看无码不卡| 久久久久久妓女精品影院| AV无码久久久久久不卡网站| 少妇精品久久久一区二区三区| 国色天香精品一卡2卡3卡4| 中国CHINAGARY武警网站| 日本强伦姧人妻69影院| 国产午夜无码精品免费看动漫| 野花韩国视频观看免费高清的| 人妻被黑人与白人巨大中出| 国产精华液一二三区别 | 久久久AV波多野一区二区| CHINESE玩弄老年熟女| 无码AV熟妇素人内射vr在线| 久久国产精品成人影院| WWW.亚洲精品色情AⅤ色戒| 午夜人妻久久久久久久久| 老师趴讲台屁股撅起来作文| 成人欧美一区二区| 亚洲第一成人网站| 欧美人和黑人牲交网站上线| 国产精品久久久久无码AV| 孕交VIDEOSGRATIS乌| 少女たちよ在线观看动漫在线观看| 狠狠躁夜夜人人爽天96| av网站免费观看| 性高朝久久久久久久久久| 蜜乳AV一区二区三区| 国产成人精品一区二区秒拍| 亚洲中文无码永久免| 日日摸日日碰夜夜爽无码| 精品久久久久久亚洲精品| 白嫩美女被内射59| 亚洲AV无码久久精品香娇| 欧美性XXXXX极品娇小| 孩交精品XXXX视频视频| JIZZ在线观看中国少妇| 亚洲第一无码精品一区| 日本黄页网站免费观看| 久久精品国产亚洲AⅤ无码| 夫妇交换聚会群4P疯狂大战|