成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院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號
欧美又粗又大XXXⅩBBBB| 女人被狂躁C到高潮视频| 麻豆传播媒体APP官网在线观看| 麻豆国产成人AV高清在线| 欧美VIDEOS另类极品| 日本在线视频WWW鲁啊鲁| 亭亭玉立国色天香四月天| 男生J桶进女人P又色又爽又黄| 亚洲AV无码精品色午夜蛋壳| 亚洲欧美日韩愉拍自拍| 国产精品R级最新在线观看| 国产精品久久久久久麻豆一区| 国产亚洲午夜高清国产拍精品| 久久精品国产久精国产思思 | 西西大胆无码视频免费| 18禁黄网站禁片无遮挡观看AP| 在线精品国精品国产尤物| FREEHDⅩXXXXSEX| 国产成人无码久久久精品一| 极品国产主播粉嫩在线| 乱中年女人伦视频国产| 日本熟妇在线一区二区三区| 性一交一乱一伦一在线小视频| 呦交小U女国产精品视频| 部长的夫人的味道HD| 国产无遮挡裸体免费直播| 浪荡艳妇爆乳JUFD汗だく肉感| 日本厨房ⅩⅩⅩⅩⅩ乱| 亚洲AV无码成人精品区网站| 中文字幕人妻AV一区二区| 丰满大屁股BWWBWWBWW| 交换朋友夫妻互换客厅韩国5| 女主播屁G裸露W身曝光| 无码人妻精品一区二区三区在线| 亚洲综合国产精品无码AⅤ| ぱらだいす天堂中文网WWW| 国产私人尤物无码不卡| 免费人成网WW555KKK在线| 少妇AAA级久久久无码精品片| 亚洲精品国偷自产在线| ぱらだいす天堂中文网WWW在线| 国内精品久久久久精免费| 欧美不卡一区二区三区| 无码中文精品专区一区二区 | 亚洲AV无码成人精品区毛片| 3分19秒砍人手脚血腥场面| 国产精品久久久久久婷婷| 美女直播全婐网站免费高清| 我和亲妺婷婷在浴室作爱经过| 征服丝袜旗袍人妻| 国产成人综合日韩精品无码| 蜜臀AV福利无码一二三| 无码日韩做暖暖大全免费不卡| 18禁黄网站禁片免费观看女女 | 免费AV片大尺度在线观看| 无码国产精品一区二区免费16| 中国熟妇色XXXX欧美老妇多毛| 国产精品久久久久7777| 女女互磨互喷水高潮LES呻吟| 亚洲AV 无码片一区二区三区| MM131极品尤物美女| 精品噜噜噜噜久久久久久久久| 日剧《轮到你了》| 野花香视频在线观看社区 | 白嫩美女被内射59| 久久精品国产色蜜蜜麻豆| 少妇特黄Av一区二区三区| 中文字幕伊人久久| 黑人巨大BBWBBW| 揉着我的奶从后面进去| 中文字幕人妻色偷偷久久| 国内最真实ⅩⅩⅩ人伦| 日韩一区二区三区无码影院| 中文乱码人妻一区二区三区视频| 国内国外日产一区二区| 少妇高潮潮喷到猛进猛出小说| 中文字幕乱码一区二区三区免费| 韩国电影办公室6免费完整版| 三级韩国2017在线观看| 999精品国产人妻无码系列| 精品水蜜桃久久久久久久| 偷拍激情视频一区二区三区| YEEZY380蜜桃粉满天| 乱人伦中文视频在线| 亚洲成AV人片无码天堂下载| 国产成人A∨激情视频厨房| 欧美一区二区三区成人片在线| 一二三四视频社区在线一中文| 国精产品一区一区三区M| 四川少妇BBW搡BBBB槡BB| XX娇小嫩XX中国XX| 免费人妻AⅤ无码专区久久综合 | 麻豆WWW传媒入口| 亚洲国产精品一区二区久久| 国产精品成人一区无码| 日本伦奷在线播放| 91久人人做人人妻人人玩精品| 久久精品一区二区三区AV| 亚洲AV无码一区二区三区网站| 国产精品岛国久久久久| 色舞月亚洲综合一区二区| 俺去俺来也WWW色官网| 牛鞭进入女人下身的视频| 伊人久久大香线蕉综合AV| 果冻国产精品麻豆成人AV电影| 无遮挡又色又刺激的视频黄 | 久久夜色精品国产亚洲AV| 亚洲国产精品成人精品无码区| 国产丝袜无码一区二区三区视频| 调教小奴高潮惩罚PLAY道具| 国产A级毛多妇女视频| 日本边添边摸边做边爱边| YYYY11111少妇影院| 欧美日韩国产精品| 99精产国品一二三产| 嫩草在线视频WWW免费看| 中文字幕一区二区人妻5566| 两根硕大一起挤进小紧H共妻| 一区二区精品视频日本| 久久人人爽人人爽人人片AV不| 亚洲中文字幕无码第一区| 久久久99精品成人片中文字幕| 亚洲日韩国产精品无码AV| 精品无码乱码AV| 亚洲制服丝袜AV一区二区三区| 久久精品成人无码观看免费 | 差差差无掩盖30分钟79集| 日本大乳高潮视频在线观看| 波多野结衣乳巨码无在线| 日韩免费视频一一二区| 丁香色婷婷国产精品视频| 射精情感曰妓女色视频| 国产成人无码A区在线观看视频A | 人妻三级日本香港三级极97| 啊灬啊灬高潮来了…视频APP| 日本大学SGU大二大三| 俄罗斯ZOOM与人性ZOOM| 天堂无码人妻精品一区二区三区| 国产精品自在拍首页视频8| 亚洲AV日韩AV永久无码电影| 红杏亚洲影院一区二区三区| 亚洲深深色噜噜狠狠网站| 看娇妻被两朋友共用| AE射频电源成色| 日本伊人色综合网| 国产激情无码一区二区APP| 亚洲AV午夜成人片动漫番| 精品亚洲成A人无码成A在线观看| 一区二区三区国产精华护肤品| 男人激烈吮乳吃奶到高潮视频| 爱丫爱丫在线影院| 天天爽狠狠噜天天噜日日噜| 国内精品久久久人妻中文字幕| 亚洲一区二区精品无码色欲Av| 蜜臀色欲AV在线播放国产日韩| www.黄色AV考逼| 少妇高潮XXXⅩ白浆699| 国产亚洲欧美日韩剧的剧情介绍| 亚洲人成网站18禁止一区| 免费人成视网站在线不卡| XXXX性XX另类Ⅹ中国HD| 婷婷五月深深久久精品| 狠狠色噜噜狠狠亚洲AV| 中日AV乱码一区二区三区乱码| 欧洲精品一线二线三线区别| 国产波霸爆乳一区二区| 亚洲丰满性熟妇PⅩXXOO| 蜜臀久久99精品久久久久久小说| 把腿张开老子臊烂你的黄漫| 无码一区二区三区视频| 久久久久99精品成人片试看 | 精品国产亚洲AV麻豆| 337P日本欧洲亚洲大胆精筑| 少妇高清精品毛片在线视频| 黑人大荫道BBWBBB高潮潮喷| 18禁裸乳啪啪无遮裆网站| 色8激情欧美成人久久综合电影| 国语精品自产拍在线观看网站 | 亚洲欧美日韩中文二区| 欧美free叉叉叉叉极品少妇| 国产精品国产精品偷麻豆| 亚洲自国产拍揄拍| 日本丰满熟妇BBXBBXHD| 国色天香十七区品质怎么样| 18禁裸体动漫美女无遮挡网站| 少妇被黑人到高潮喷白浆| 精品久久久久中文字幕日本| GAYⅩXX小奶受GV浪小辉| 性色AV极品无码专区亚洲AV| 免费A级毛片在线播放不收费| 国产AV寂寞骚妇| 野花日本HD免费高清版视频| 日韩精品无码综合福利网| 精品国产性色无码AV网站| 啊灬啊灬啊灬快灬高潮了| 亚洲AV色区一区二区三区| 拧花蒂尿用力按凸起喷水尿视频 | 疯狂做受ⅩXXX高潮欧美| 一本色道久久综合狠狠躁篇| 舌头伸进去添的我好爽高视频|