校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > Go 語言中關(guān)于接口的三個

Go 語言中關(guān)于接口的三個

熱門標(biāo)簽:賺地圖標(biāo)注的錢犯法嗎 智能電銷機器人營銷 廣東語音外呼系統(tǒng)供應(yīng)商 濮陽自動外呼系統(tǒng)代理 澳門防封電銷卡 烏魯木齊人工電銷機器人系統(tǒng) 地圖標(biāo)注測試 長沙ai機器人電銷 福州鐵通自動外呼系統(tǒng)

我的在線博客:http://golang.iswbm.com
我的 Github:github.com/iswbm/GolangCodingTime 

1. 對方法的調(diào)用限制

接口是一組固定的方法集,由于靜態(tài)類型的限制,接口變量有時僅能調(diào)用其中特定的一些方法。

請看下面這段代碼

package main

import "fmt"

type Phone interface {
 call()
}

type iPhone struct {
 name string
}

func (phone iPhone)call() {
 fmt.Println("Hello, iPhone.")
}

func (phone iPhone)send_wechat() {
 fmt.Println("Hello, Wechat.")
}

func main() {
 var phone Phone
 phone = iPhone{name:"ming's iphone"}
 phone.call()
 phone.send_wechat()
}

我定義了一個 Phone 的接口,只要求實現(xiàn) call 方法即可,也就是只要能打電話的設(shè)備就是一個電話(好像是一句沒用的廢話)。

然后再定義了一個 iPhone 的結(jié)構(gòu)體,該結(jié)構(gòu)體接收兩個方法,一個是打電話( call 函數(shù)),一個是發(fā)微信(send_wechat 函數(shù))。

最后一步是關(guān)鍵,我們定義了一個 Phone 接口類型的 phone 對象,該對象的內(nèi)容是 iPhone 結(jié)構(gòu)體。然后我們調(diào)用該對象的 call 方法,一切正常。

但是當(dāng)你調(diào)用 phone.send_wechat 方法,程序會報錯,提示我們 Phone 類型的方法沒有 send_wechat 的字段或方法。

# command-line-arguments
./demo.go:30:10: phone.send_wechat undefined (type Phone has no field or method send_wechat)

原因也很明顯,因為我們的phone對象顯示聲明為 Phone 接口類型,因此 phone調(diào)用的方法會受到此接口的限制。

那么如何讓 phone 可以調(diào)用 send_wechat 方法呢?

答案是可以不顯示的聲明為 Phone接口類型 ,但要清楚 phone 對象實際上是隱式的實現(xiàn)了 Phone 接口,如此一來,方法的調(diào)用就不會受到接口類型的約束。

修改 main 方法成如下

func main() {
 phone := iPhone{name:"ming's iphone"}
 phone.call()
 phone.send_wechat()
}

運行后,一切正常,沒有報錯。

Hello, iPhone.
Hello, Wechat.

2. 調(diào)用函數(shù)時的隱式轉(zhuǎn)換

Go 語言中的函數(shù)調(diào)用都是值傳遞的,變量會在方法調(diào)用前進(jìn)行類型轉(zhuǎn)換。

比如下面這段代碼

import (
 "fmt"
)

func printType(i interface{}) {

 switch i.(type) {
 case int:
 fmt.Println("參數(shù)的類型是 int")
 case string:
 fmt.Println("參數(shù)的類型是 string")
 }
}

func main() {
 a := 10
 printType(a)
}

如果你運行后,會發(fā)現(xiàn)一切都很正常

參數(shù)的類型是 int

但是如果你把函數(shù)內(nèi)的內(nèi)容搬到到外面來

package main

import "fmt"


func main() {
 a := 10

 switch a.(type) {
 case int:
 fmt.Println("參數(shù)的類型是 int")
 case string:
 fmt.Println("參數(shù)的類型是 string")
 }
}

就會有意想不到的結(jié)果,居然報錯了。

# command-line-arguments
./demo.go:9:5: cannot type switch on non-interface value a (type int)

這個操作會讓一個新人摸不著頭腦,代碼邏輯都是一樣的,為什么一個不會報錯,一個會報錯呢?

原因其實很簡單。

當(dāng)一個函數(shù)接口 interface{} 空接口類型時,我們說它可以接收什么任意類型的參數(shù)(江湖上稱之為無招勝有招)。

當(dāng)你使用這種寫法時,Go 會默默地為我們做一件事,就是把傳入函數(shù)的參數(shù)值(注意:Go 語言中的函數(shù)調(diào)用都是值傳遞的)的類型隱式的轉(zhuǎn)換成 interface{} 類型。

如何進(jìn)行接口類型的顯示轉(zhuǎn)換

上面了解了函數(shù)中 接口類型的隱式轉(zhuǎn)換后,你的心里可能開始有了疑問了,難道我使用類型斷言,只能通過一個接收空接口類型的函數(shù)才能實現(xiàn)嗎?

答案當(dāng)然是 No.

如果你想手動對其進(jìn)行類型轉(zhuǎn)換,可以像下面這樣子,就可以將變量 a 的靜態(tài)類型轉(zhuǎn)換為 interface{} 類型然后賦值給 b (此時 a 的靜態(tài)類型還是 int,而 b 的靜態(tài)類型為 interface{})

var a int = 25
b := interface{}(a)

知道了方法后,將代碼修改成如下:

package main

import "fmt"


func main() {
 a := 10

 switch interface{}(a).(type) {
 case int:
 fmt.Println("參數(shù)的類型是 int")
 case string:
 fmt.Println("參數(shù)的類型是 string")
 }
}

運行后,一切正常。

參數(shù)的類型是 int

3. 類型斷言中的隱式轉(zhuǎn)換

上面我們知道了,只有靜態(tài)類型為接口類型的對象才可以進(jìn)行類型斷言。

而當(dāng)類型斷言完成后,會返回一個靜態(tài)類型為你斷言的類型的對象,也就是說,當(dāng)我們使用了類型斷言,Go 實際上又會默認(rèn)為我們進(jìn)行了一次隱式的類型轉(zhuǎn)換。

驗證方法也很簡單,使用完一次類型斷言后,對返回的對象再一次使用類型斷言,Goland 立馬就會提示我們新對象 b 不是一個接口類型的對象,不允許進(jìn)行類型斷言。

總結(jié)

到此這篇關(guān)于Go 語言中關(guān)于接口的三個"潛規(guī)則"的文章就介紹到這了,更多相關(guān)go語言接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 如何判斷Golang接口是否實現(xiàn)的操作
  • golang接口IP限流,IP黑名單,IP白名單的實例
  • GO語言gin框架實現(xiàn)管理員認(rèn)證登陸接口
  • Go語言使用swagger生成接口文檔的方法
  • go語言實現(xiàn)接口查詢

標(biāo)簽:德州 貴陽 調(diào)研邀請 慶陽 西雙版納 阿克蘇 廣西 太原

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Go 語言中關(guān)于接口的三個》,本文關(guān)鍵詞  語,言中,關(guān)于,接口,的,三個,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Go 語言中關(guān)于接口的三個》相關(guān)的同類信息!
  • 本頁收集關(guān)于Go 語言中關(guān)于接口的三個的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    综合中文字幕亚洲| 亚洲午夜久久久久中文字幕久| 亚洲国产精品二十页| 五月婷婷激情综合网| 成人网页在线观看| 欧美xxxxxxxxx| 亚洲一级在线观看| 99久久精品免费看| 久久久久9999亚洲精品| 蜜桃av噜噜一区| 欧美怡红院视频| 18成人在线观看| 国产美女视频一区| 日韩欧美在线网站| 天天影视涩香欲综合网| 97久久久精品综合88久久| 久久久夜色精品亚洲| 久久精品理论片| 欧美一区二区日韩| 五月综合激情网| 欧美久久久久久蜜桃| 亚洲综合激情网| 99精品偷自拍| 亚洲欧美一区二区三区极速播放| 国产精品一级片| 久久精品人人做人人爽人人| 久久99热国产| 26uuu久久综合| 激情图区综合网| 国产网站一区二区| 高清不卡一区二区在线| 久久久久高清精品| 成人午夜看片网址| 国产精品高潮久久久久无| 成人黄色av网站在线| 国产精品嫩草影院com| 风间由美一区二区av101| 国产精品三级视频| 91免费国产在线| 亚洲影视资源网| 欧美日韩高清一区二区不卡| 亚洲成人动漫在线观看| 91精品国产91综合久久蜜臀| 蜜臂av日日欢夜夜爽一区| 日韩精品一区二区三区视频| 国产在线不卡视频| 中文字幕在线一区| 在线一区二区三区四区| 日本亚洲电影天堂| 国产欧美一二三区| 色婷婷综合久久久久中文| 亚洲一区二区三区国产| 69久久99精品久久久久婷婷| 免费av成人在线| 亚洲国产精品99久久久久久久久 | 91浏览器在线视频| 艳妇臀荡乳欲伦亚洲一区| 7777精品伊人久久久大香线蕉| 国产久卡久卡久卡久卡视频精品| 日韩欧美精品在线视频| 国产乱码精品一品二品| 亚洲男人的天堂在线观看| 在线综合视频播放| 国产成人av一区二区三区在线观看| 国产精品婷婷午夜在线观看| 欧美视频一区二区| 国产精品一二三区在线| 亚洲最新在线观看| 久久久精品天堂| 欧美色偷偷大香| 国产精品原创巨作av| 亚洲小说欧美激情另类| 久久久五月婷婷| 欧美日韩aaa| 不卡视频在线看| 精品一区二区三区视频在线观看| 中文字幕一区二区三区不卡在线 | av激情亚洲男人天堂| 天天色综合天天| 日韩美女视频一区二区| 精品91自产拍在线观看一区| 色哟哟一区二区三区| 九九**精品视频免费播放| 一区二区成人在线| 久久亚洲一级片| 51精品视频一区二区三区| 成人99免费视频| 久久99精品视频| 亚洲国产aⅴ成人精品无吗| 欧美国产日韩a欧美在线观看 | 99国产精品久久久久久久久久 | 国产精品妹子av| 日韩一区二区三区精品视频| 99久久99久久久精品齐齐| 国产麻豆精品一区二区| 日本亚洲最大的色成网站www| 亚洲另类在线视频| 国产精品女人毛片| 日本一区二区三区久久久久久久久不 | 欧美日韩国产三级| 一本色道a无线码一区v| 成人免费不卡视频| 国产一区在线观看视频| 久久黄色级2电影| 亚洲午夜免费电影| 亚洲国产人成综合网站| 亚洲精品高清在线| 欧美经典一区二区| 国产三区在线成人av| 精品电影一区二区| 欧美电影精品一区二区| 日韩丝袜情趣美女图片| 欧美一区二区网站| 91麻豆精品国产自产在线| 欧美日韩综合在线| 在线播放亚洲一区| 欧美一区二区视频在线观看2020 | 99re热视频精品| 99re这里只有精品视频首页| av网站一区二区三区| 成人精品免费网站| 91视频观看视频| 色88888久久久久久影院按摩| 色综合天天综合网国产成人综合天| 成人av网站在线观看| 91丨九色丨国产丨porny| 97aⅴ精品视频一二三区| 在线一区二区观看| 欧美狂野另类xxxxoooo| 精品久久久久香蕉网| 中文字幕av一区 二区| 国产精品另类一区| 亚洲色图制服诱惑| 亚洲一二三区在线观看| 日韩av网站免费在线| 国内国产精品久久| eeuss鲁一区二区三区| 欧美日韩成人在线| 久久影视一区二区| 成人欧美一区二区三区白人| 亚洲最大成人综合| 久久99精品久久久久婷婷| 成人午夜碰碰视频| 欧美日本韩国一区二区三区视频 | 91精品国产91久久综合桃花| 久久综合资源网| 亚洲乱码中文字幕| 麻豆国产精品777777在线| 波多野结衣中文字幕一区| 欧洲av一区二区嗯嗯嗯啊| 日韩欧美国产不卡| 最新中文字幕一区二区三区| 污片在线观看一区二区| 国产激情精品久久久第一区二区 | 中文字幕不卡在线播放| 亚洲高清不卡在线| 国产精品 欧美精品| 欧美人与z0zoxxxx视频| 欧美极品aⅴ影院| 日韩国产欧美视频| av午夜一区麻豆| 久久综合999| 天堂精品中文字幕在线| av在线这里只有精品| 精品福利一二区| 亚洲一区二区欧美日韩| 国产成都精品91一区二区三| 在线成人免费观看| 一区二区三区中文字幕在线观看| 韩国av一区二区三区四区| 欧美亚洲另类激情小说| 中文字幕免费不卡在线| 日韩福利电影在线| 色8久久人人97超碰香蕉987| 久久精品视频一区二区| 蜜乳av一区二区三区| 欧美人xxxx| 亚洲另类在线制服丝袜| av在线播放成人| 国产区在线观看成人精品| 蜜桃av噜噜一区| 91 com成人网| 视频一区视频二区中文字幕| 色婷婷av一区| 国产精品福利一区| 丁香啪啪综合成人亚洲小说| 精品国产123| 激情成人午夜视频| 欧美大肚乱孕交hd孕妇| 日韩高清不卡在线| 欧美系列日韩一区| 亚洲一区二区三区四区在线免费观看| 成人av网站在线观看| 中文字幕一区日韩精品欧美| 国产精品自拍三区| 国产丝袜欧美中文另类| 成人丝袜高跟foot| 国产欧美日韩在线视频| 丁香啪啪综合成人亚洲小说 | 亚洲国产一区二区a毛片|