久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

go語言可以開發(fā)接口嗎

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

go語言可以開發(fā)接口嗎

php入門到就業(yè)線上直播課:進(jìn)入學(xué)習(xí)
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調(diào)試工具:點(diǎn)擊使用

本教程操作環(huán)境:windows7系統(tǒng)、GO 1.18版本、Dell G3電腦。

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

概念

go語言中接口是一組方法的簽名,它是go語言中重要的組成部分,接口做的事情就好像是定義一個(gè)規(guī)范或者協(xié)議,各個(gè)實(shí)現(xiàn)方只要按照協(xié)議實(shí)現(xiàn)即可。

接口是一種類型

接口類型是對其他類型行為的抽象和概括,不關(guān)心具體的實(shí)現(xiàn)細(xì)節(jié),這種抽象的方式可以讓我們的函數(shù)變的更加靈活。

接口定義

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

在go語言中我們使用interface關(guān)鍵字來定義接口。

接口實(shí)現(xiàn)條件

如果一個(gè)任意類型T的方法集為一個(gè)接口類型的方法集的超集,則我們說類型T實(shí)現(xiàn)了該接口。

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

接口的實(shí)現(xiàn)需要遵循兩條規(guī)則才能讓接口可用:

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

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:可以發(fā)送短信",h.Name) }  func main() {  	h := new(HuaWei) 	h.Name="華為" 	var phone Phone 	phone = h 	phone.SendMessage() }
登錄后復(fù)制

當(dāng)類型無法實(shí)現(xiàn)接口時(shí),編譯器會報(bào)錯:

a.函數(shù)名稱不一致導(dǎo)致的報(bào)錯

b.實(shí)現(xiàn)函數(shù)的方法簽名不一致導(dǎo)致的報(bào)錯

2、接口中所有方法均被實(shí)現(xiàn)當(dāng)一個(gè)接口中有多個(gè)方法時(shí),只有這些方法都被實(shí)現(xiàn)了,接口才能被正確編譯并使用

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

go語言可以開發(fā)接口嗎

當(dāng) 小米 類型僅僅實(shí)現(xiàn)接口中的一個(gè)方法的時(shí)候,我們在使用的時(shí)候,編譯報(bào)錯。

類型與接口的關(guān)系

一個(gè)類型實(shí)現(xiàn)多個(gè)接口

一個(gè)類型可以實(shí)現(xiàn)多個(gè)接口,而接口之間彼此獨(dú)立,不知道對方的實(shí)現(xiàn)。

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

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: "旺財(cái)", 	} 	m = d 	s=d 	m.move() 	s.say() }
登錄后復(fù)制

多個(gè)類型實(shí)現(xiàn)同一個(gè)接口

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

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

例如狗可以動,汽車也可以動,可以使用如下代碼實(shí)現(xiàn)這個(gè)關(guān)系:

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

這個(gè)時(shí)候我們在代碼中就可以把狗和汽車當(dāng)成一個(gè)會動的物體來處理了,不再需要關(guān)注它們具體是什么,只需要調(diào)用它們的move方法就可以了。

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

空接口

空接口:interface{},不包含任何方法,正因?yàn)槿绱耍魏晤愋投紝?shí)現(xiàn)了空接口,所以空接口可以存儲任意類型的數(shù)據(jù)。

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

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)
登錄后復(fù)制

空接口作為map的值

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

類型推斷

空接口可以存儲任意類型的值,那我們?nèi)绾潍@取其存儲的具體數(shù)據(jù)呢?

接口值

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

這兩部分分別稱為接口的動態(tài)類型和動態(tài)值。

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

x.(T)
登錄后復(fù)制

其中:

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

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

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

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

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

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!")     } }
登錄后復(fù)制

因?yàn)榭战涌诳梢源鎯θ我忸愋椭档奶攸c(diǎn),所以空接口在Go語言中的使用十分廣泛。

總結(jié)

關(guān)于接口需要注意的是,只有當(dāng)有兩個(gè)或兩個(gè)以上的具體類型必須以相同的方式進(jìn)行處理時(shí)才需要定義接口。不要為了接口而寫接口,那樣只會增加不必要的抽象,導(dǎo)致不必要的運(yùn)行時(shí)損耗。

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
国产精品白浆| 久久久91麻豆精品国产一区| 九色porny丨国产首页在线| 久久伊人亚洲| 鲁鲁在线中文| 日韩精品网站| 国产精品毛片一区二区在线看| 久久精品五月| 日韩欧美在线中字| 国产99久久| 2023国产精品久久久精品双| 999国产精品| 中文国产一区| 亚洲精品伊人| 国产精品s色| 午夜影院一区| 在线亚洲自拍| 欧美永久精品| 国产成人精品一区二区三区视频| 色一区二区三区四区| 久久久亚洲一区| 国产在线不卡| 免费在线观看不卡| 欧美天堂在线| 国产不卡人人| 99成人在线| 国产日产精品_国产精品毛片 | 日韩精品视频网| 国产精品观看| 久久久777| 亚洲天堂av资源在线观看| 久久黄色影视| 久久久一本精品| 老鸭窝毛片一区二区三区| 欧美日韩亚洲一区三区| 粉嫩av一区二区三区四区五区 | 视频一区二区国产| 91麻豆精品| 神马午夜在线视频| 综合激情视频| 国产一区二区三区四区| 黄色欧美日韩| 国产精品欧美三级在线观看| 日本精品不卡| 日本不卡视频在线| 日韩电影免费在线观看| 中文字幕日韩高清在线| 精品日韩在线| 国产模特精品视频久久久久| 国产精品毛片视频| 丝袜美腿诱惑一区二区三区| 亚州av一区| se01亚洲视频 | 日本不卡高清| 久久激情一区| 欧美日韩中文| 激情久久中文字幕| 日韩国产欧美在线播放| 亚洲欧洲高清| 奇米狠狠一区二区三区| 久久精品不卡| 国产精品sm| 丝袜国产日韩另类美女| 福利视频一区| 五月亚洲婷婷 | 日韩在线电影| 久久国产影院| 日韩精彩视频在线观看| 亚洲天堂黄色| 精品国产aⅴ| 日本精品国产| 成人av二区| 国产盗摄——sm在线视频| 日本不卡高清| 国产精品试看| 欧美黄色网页| 久久不卡国产精品一区二区| 石原莉奈在线亚洲三区| 色婷婷精品视频| 久久精品国产在热久久| 日本不卡视频在线| 日韩视频在线一区二区三区 | 麻豆视频久久| 日韩中出av| 国产一级一区二区| 色老板在线视频一区二区| 美腿丝袜亚洲三区| 中文字幕亚洲在线观看| 久久伦理在线| 国产色播av在线| 欧美黄色精品| 国产欧美日韩精品高清二区综合区| 欧美精品一卡| 亚洲h色精品| 精品亚洲成人| 国产精品网在线观看| 亚洲3区在线| 午夜在线一区| 狠狠干成人综合网| 欧美~级网站不卡| 日韩成人亚洲| 色一区二区三区| 国产日韩电影| 91视频精品| а√在线中文在线新版| 日韩av专区| 国产一区二区三区亚洲综合| 欧美精品1区| 久久av导航| 国产日产精品_国产精品毛片 | 香蕉久久久久久久av网站| 久久久久.com| 免费污视频在线一区| 日韩电影二区| 欧洲亚洲一区二区三区| 精品欧美一区二区三区在线观看| 成人精品国产亚洲| 国产成人久久精品一区二区三区| 麻豆一区二区99久久久久| 麻豆视频久久| 国产一区二区三区四区二区| 风间由美中文字幕在线看视频国产欧美| 国产精品66| 欧美国产另类| 国产一区二区三区四区二区| 91亚洲自偷观看高清| 成人美女视频| 国产在线日韩| 久久福利精品| 亚洲精品韩国| 国产亚洲一卡2卡3卡4卡新区| 国产午夜一区| 精品视频网站| 亚洲成人一区在线观看| 国产综合亚洲精品一区二| 99国产精品私拍| 亚洲三级视频| 国产精品午夜一区二区三区| 精品一级视频| 久久国产亚洲| 亚洲精品综合| 国产精品对白久久久久粗| 精品国产一区二区三区2021| 欧美男人天堂| 好看的av在线不卡观看| 视频一区日韩精品| 国产精品2023| 天堂av在线| 亚洲欧美日韩国产| 91综合久久爱com| 精品日韩一区| 欧美日韩国产免费观看| 日本在线观看不卡视频| 久久永久免费| 九九久久婷婷| 亚洲影院天堂中文av色| 国产精品久久亚洲不卡| 电影亚洲精品噜噜在线观看| 午夜亚洲福利在线老司机| 青青草国产成人99久久| 高清日韩中文字幕| 久久久成人网| 视频精品一区| 在线手机中文字幕| 噜噜噜久久亚洲精品国产品小说| 欧美视频二区| 91精品婷婷色在线观看| 亚洲精品一级| 国产在线看片免费视频在线观看| 亚洲欧美久久久| 免费在线观看一区| 亚洲国产一区二区在线观看| 日韩激情中文字幕| 成人看片网站| 日韩1区2区日韩1区2区| 日韩精品一区二区三区免费观看| 亚洲欧美激情诱惑| 欧美xxxx性| 99综合视频| 九九九精品视频| 蜜乳av另类精品一区二区| 免费在线亚洲| 日av在线不卡| av免费不卡国产观看| 亚洲综合中文| 久久久噜噜噜| 国产精品久久久久久久久免费高清| 久久久噜噜噜| 久久成人福利| 视频在线观看91| 国产精品精品| 亚洲综合婷婷| 深夜视频一区二区| 国产欧美日韩精品一区二区免费 | 国产精品嫩模av在线| 好看不卡的中文字幕| 国产成人免费av一区二区午夜| 老司机精品久久| 日韩成人亚洲| 国产麻豆一区二区三区精品视频|