gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

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

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號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
97中文字幕在线| 亚洲第一综合网站| 精品国产无码在线| 水蜜桃色314在线观看| 9久久婷婷国产综合精品性色 | 黄色一级在线视频| 亚洲综合在线一区二区| 真人抽搐一进一出视频| 亚洲一区二区福利视频| 日韩精品―中文字幕| 国产精品一二三在线观看| 亚洲这里只有精品| 草草草在线视频| 国产资源在线视频| 麻豆视频传媒入口| 中文字幕第66页| 激情黄色小视频| 日韩欧美在线播放视频| 亚洲色成人www永久在线观看 | 亚洲AV无码成人精品一区| 成人性视频欧美一区二区三区| 黄页免费在线观看视频| 日韩精品手机在线观看| 一级黄色大片儿| 亚洲天堂av一区二区三区| 少妇网站在线观看| 日韩福利视频在线| 爱情岛论坛成人| 99视频精品免费| 北条麻妃av高潮尖叫在线观看| 欧美三级一级片| 成人在线看视频| 国产成人精品无码播放| 色一情一乱一伦一区二区三区日本| 任你操这里只有精品| 久久免费视频3| 成人在线免费播放视频| 男女污污的视频| 亚洲欧美天堂在线| 91免费网站视频| 激情五月六月婷婷| 日韩黄色短视频| 久久无码高潮喷水| 午夜视频在线网站| 麻豆md0077饥渴少妇| 日本大胆人体视频| 久久视频这里有精品| 青青在线视频观看| 亚洲午夜激情影院| 国产成a人亚洲精v品在线观看| 国产91在线免费| 天天看片天天操| youjizz.com在线观看| 免费观看精品视频| 日本女人高潮视频| 性欧美大战久久久久久久| 黄色国产小视频| 欧美日韩视频免费在线观看| 乱妇乱女熟妇熟女网站| 国产精品人人妻人人爽人人牛| 三区视频在线观看| 1024av视频| www.午夜av| www.com毛片| 污污污污污污www网站免费| 动漫av网站免费观看| www.亚洲自拍| 动漫av网站免费观看| 欧美少妇在线观看| 国产无套粉嫩白浆内谢的出处| 日本黄色a视频| 黄色三级视频片| 精品无码国产一区二区三区av| 国产三级三级看三级| 草b视频在线观看| aaaaaaaa毛片| 亚洲第一狼人区| 日韩欧美一区三区| 永久免费在线看片视频| 亚洲一级片网站| 久久成人免费观看| 亚洲精品少妇一区二区| 亚洲制服在线观看| 黄色片视频在线| 亚洲人成无码www久久久| 丰满少妇久久久| 日本精品久久久久久久久久| 桥本有菜av在线| 经典三级在线视频| 国产av不卡一区二区| 亚洲欧美久久久久| 波多结衣在线观看| 久久精品午夜福利| 18岁网站在线观看| 国内外成人免费激情视频| 黄色一级片黄色| 肉大捧一出免费观看网站在线播放| 91女神在线观看| 超碰在线资源站| 午夜免费一级片| 8x8x成人免费视频| 日韩精品视频网址| 中文av字幕在线观看| 久久精品久久99| 亚洲欧美日韩一二三区| 在线视频日韩欧美| 最新av在线免费观看| 超碰超碰超碰超碰超碰| 久草免费福利在线| a√天堂在线观看| 99热手机在线| 久久精品国产99久久99久久久| 在线播放黄色av| 国产精品啪啪啪视频| av 日韩 人妻 黑人 综合 无码| 青青在线免费视频| 欧美 国产 日本| xx欧美撒尿嘘撒尿xx| 在线视频一二区| 日本一本中文字幕| 黄色片久久久久| 嫩草视频免费在线观看| 91精品国产毛片武则天| 日本欧美视频在线观看| 老司机午夜av| 乱熟女高潮一区二区在线| 青草视频在线观看视频| 黄色动漫网站入口| 国产一级片自拍| 国产九色porny| 手机看片一级片| 一级性生活视频| 99视频精品免费| 看全色黄大色大片| 亚洲色欲综合一区二区三区| 激情成人在线观看| 日本精品久久久久中文字幕| 天美一区二区三区| av网站在线观看不卡| 成人手机视频在线| 欧美日韩在线成人| 日本福利视频一区| 日本免费在线视频观看| 免费看a级黄色片| www.一区二区.com| 在线视频观看一区二区| 99久久国产宗和精品1上映 | www.国产二区| 欧美午夜aaaaaa免费视频| 日韩视频在线视频| 日日噜噜夜夜狠狠久久丁香五月| 黄色国产小视频| 中文字幕无码精品亚洲35| 九九久久九九久久| 亚洲热在线视频| 亚洲视频在线观看一区二区三区| 国产传媒久久久| 热这里只有精品| 日本高清久久久| 欧美男女交配视频| 日本成人中文字幕在线| 美女福利视频在线| 18禁免费无码无遮挡不卡网站| 四虎精品欧美一区二区免费| 日本福利视频导航| 久久久一二三四| 99精品视频网站| 国产精品久久久久久久99| 9久久婷婷国产综合精品性色| 亚洲中文字幕无码专区| 女人天堂av手机在线| 精品国产一区二区三区在线| 超碰91在线播放| 国产大尺度在线观看| 自拍偷拍视频在线| 九色91popny| 999一区二区三区| 国产va亚洲va在线va| 人妻熟妇乱又伦精品视频| 黑人糟蹋人妻hd中文字幕| 国产男女激情视频| 日韩精品视频一二三| 在线观看国产一级片| 欧美专区第二页| 激情六月天婷婷| 色综合av综合无码综合网站| 男女激情无遮挡| 啊啊啊一区二区| 亚洲视频第二页| 99久热在线精品视频| 久久国产精品视频在线观看| 不要播放器的av网站| 久久6免费视频| 特黄特黄一级片| 日韩a∨精品日韩在线观看| 成人性生生活性生交12| 欧美午夜aaaaaa免费视频| 黄色网络在线观看| 欧美污视频网站| 亚洲制服在线观看|