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一区二区
久久免费视频3| 能看的毛片网站| 涩多多在线观看| 天天综合网日韩| 国产精品自拍视频在线| 天堂网在线免费观看| 欧美日韩大尺度| 日本在线一二三区| 亚洲美女爱爱视频| ijzzijzzij亚洲大全| 日韩专区第三页| 欧美视频在线免费播放| 国产精品秘入口18禁麻豆免会员| 国产xxxxx在线观看| 国产成人亚洲精品无码h在线| 国产精品333| 欧美私人情侣网站| 日本中文字幕精品—区二区| www.亚洲自拍| 99在线精品免费视频| 三级4级全黄60分钟| 狠狠操狠狠干视频| 免费超爽大片黄| caoporn超碰97| 中国黄色录像片| 日日碰狠狠添天天爽超碰97| 日本天堂免费a| 日韩欧美视频网站| 免费无码国产v片在线观看| 天天色综合社区| 三级性生活视频| 国产高清不卡无码视频| 内射国产内射夫妻免费频道| 欧美激情精品久久久久久小说| www.日日操| 超碰成人在线免费观看| 欧美日韩黄色一级片| 爱豆国产剧免费观看大全剧苏畅 | 成人免费毛片播放| 91精品一区二区三区四区| 啊啊啊一区二区| 麻豆传媒网站在线观看| 亚洲免费一级视频| 国产乱子伦农村叉叉叉| 一级全黄肉体裸体全过程| 女人喷潮完整视频| 欧美国产视频一区| 久久久久久久久久久久久久久国产| 日韩黄色短视频| 老司机午夜免费福利视频| 88av.com| 久久久久国产精品熟女影院| 国产黄色片免费在线观看| 国产高清精品软男同| 国产aⅴ爽av久久久久| aaa毛片在线观看| 欧美日本视频在线观看| 97久久国产亚洲精品超碰热| 午夜免费福利网站| 亚洲色图欧美自拍| 日本超碰在线观看| 精品999在线| 最新中文字幕免费视频| 国产一区二区在线免费播放| 欧美丰满熟妇xxxxx| 天天天干夜夜夜操| 少妇一级淫免费放| 99国产精品久久久久久| 超碰成人在线播放| 亚洲成人手机在线观看| 四虎免费在线观看视频| 国产一二三四五| 日韩欧美猛交xxxxx无码| 日韩极品视频在线观看| 男人添女荫道口图片| 国产精品网站免费| 国产成人手机视频| 中文字幕线观看| 麻豆映画在线观看| 欧美精品久久久久久久免费| 性欧美大战久久久久久久| 日韩av三级在线| 538任你躁在线精品免费| 手机精品视频在线| 欧美男女爱爱视频| 日韩人妻精品无码一区二区三区| 91热这里只有精品| 国产999免费视频| 日本熟妇人妻xxxx| 熟女人妇 成熟妇女系列视频| 性生活免费在线观看| 大片在线观看网站免费收看| 婷婷五月综合缴情在线视频| 日本久久精品一区二区| 欧美日韩在线免费观看视频| 色哟哟免费网站| 国产l精品国产亚洲区久久| 538任你躁在线精品免费| 在线观看日本www| 精品少妇一区二区三区在线| 制服丝袜中文字幕第一页| 久久这里只有精品8| 四季av一区二区| 97在线免费视频观看| 国产视频在线视频| 久青草视频在线播放| 欧美第一页浮力影院| 无码中文字幕色专区| 91免费视频污| 久久精品影视大全| 99在线精品免费视频| 蜜桃免费在线视频| 午夜精品久久久内射近拍高清| 国产av第一区| 男生操女生视频在线观看| 成熟丰满熟妇高潮xxxxx视频| 手机成人av在线| www.99r| 欧美在线观看视频网站| 中文字幕无码精品亚洲资源网久久| 亚洲一区二区三区四区五区xx| 精品无码国模私拍视频| 欧洲精品视频在线| 1314成人网| 欧美日韩视频免费在线观看| 婷婷激情四射五月天| 日韩一级片播放| 虎白女粉嫩尤物福利视频| 免费看国产曰批40分钟| 日韩久久久久久久久久久久| 国产成人精品免费看在线播放| 亚洲人视频在线| 中日韩av在线播放| 日本中文字幕观看| 三级一区二区三区| 日本高清xxxx| av一区二区三区免费观看| 日韩国产成人无码av毛片| ijzzijzzij亚洲大全| 色姑娘综合天天| 国产91沈先生在线播放| 久久亚洲国产成人精品无码区| 黄色片免费在线观看视频| 超碰超碰超碰超碰超碰| 国产高清av在线播放| 日本不卡在线观看视频| 久久久久久三级| 艳母动漫在线观看| 久久这里只有精品8| av免费观看大全| 日本三区在线观看| 日韩在线一区视频| 妞干网视频在线观看| 免费黄色福利视频| 超碰成人在线播放| av日韩在线看| 亚洲 中文字幕 日韩 无码| 手机av在线网站| 成人性免费视频| 在线观看免费成人av| 国产精品av免费| aa在线免费观看| 波多野结衣免费观看| 国产美女主播在线播放| 成人精品小视频| 国产免费xxx| 97视频在线免费播放| 99精品一区二区三区的区别| 丰满少妇被猛烈进入高清播放| 亚洲天堂av一区二区| 菠萝蜜视频在线观看入口| 爱情岛论坛vip永久入口| 999久久欧美人妻一区二区| 亚洲色图久久久| 人人妻人人做人人爽| 在线免费看污网站| 熟妇人妻va精品中文字幕| 成人免费观看在线| 免费网站在线观看黄| 男人天堂网视频| 高清无码一区二区在线观看吞精| 久草福利视频在线| 无码粉嫩虎白一线天在线观看| 一级淫片在线观看| 欧美日韩在线观看不卡| 欧美 日本 亚洲| 亚洲国产精品无码av| 成人毛片100部免费看| 久久久久久久久久一区二区| 国产精品亚洲a| 成人在线免费在线观看| 五十路熟女丰满大屁股| 一二三四中文字幕| 婷婷视频在线播放| 国产精品自在自线| 9久久婷婷国产综合精品性色| av观看免费在线| 成人免费观看毛片| 一本久道综合色婷婷五月| 日本一区二区黄色|