亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > Go 語言中關于接口的三個

Go 語言中關于接口的三個

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

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

1. 對方法的調用限制

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

請看下面這段代碼

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 的接口,只要求實現 call 方法即可,也就是只要能打電話的設備就是一個電話(好像是一句沒用的廢話)。

然后再定義了一個 iPhone 的結構體,該結構體接收兩個方法,一個是打電話( call 函數),一個是發微信(send_wechat 函數)。

最后一步是關鍵,我們定義了一個 Phone 接口類型的 phone 對象,該對象的內容是 iPhone 結構體。然后我們調用該對象的 call 方法,一切正常。

但是當你調用 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調用的方法會受到此接口的限制。

那么如何讓 phone 可以調用 send_wechat 方法呢?

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

修改 main 方法成如下

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

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

Hello, iPhone.
Hello, Wechat.

2. 調用函數時的隱式轉換

Go 語言中的函數調用都是值傳遞的,變量會在方法調用前進行類型轉換。

比如下面這段代碼

import (
 "fmt"
)

func printType(i interface{}) {

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

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

如果你運行后,會發現一切都很正常

參數的類型是 int

但是如果你把函數內的內容搬到到外面來

package main

import "fmt"


func main() {
 a := 10

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

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

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

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

原因其實很簡單。

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

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

如何進行接口類型的顯示轉換

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

答案當然是 No.

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

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

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

package main

import "fmt"


func main() {
 a := 10

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

運行后,一切正常。

參數的類型是 int

3. 類型斷言中的隱式轉換

上面我們知道了,只有靜態類型為接口類型的對象才可以進行類型斷言。

而當類型斷言完成后,會返回一個靜態類型為你斷言的類型的對象,也就是說,當我們使用了類型斷言,Go 實際上又會默認為我們進行了一次隱式的類型轉換。

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

總結

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

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

標簽:德州 貴陽 調研邀請 慶陽 西雙版納 阿克蘇 廣西 太原

巨人網絡通訊聲明:本文標題《Go 語言中關于接口的三個》,本文關鍵詞  語,言中,關于,接口,的,三個,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Go 語言中關于接口的三個》相關的同類信息!
  • 本頁收集關于Go 語言中關于接口的三個的相關信息資訊供網民參考!
  • 推薦文章
    久久国产精品自线拍免费| 欧美一级视频免费观看| a级毛片免费观看网站| 一级女人毛片人一女人| 成人高清免费| 国产国语在线播放视频| 国产美女在线观看| 欧美日本二区| 黄视频网站免费观看| 国产网站麻豆精品视频| 99久久精品国产片| 欧美激情一区二区三区在线| 国产精品1024永久免费视频| 国产福利免费视频| 国产极品精频在线观看| 精品久久久久久中文字幕2017| 午夜在线亚洲男人午在线| 毛片高清| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 999久久久免费精品国产牛牛| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 久草免费在线视频| 亚洲天堂免费| 久久久久久久免费视频| 国产极品精频在线观看| 麻豆网站在线免费观看| 国产精品123| 国产一区二区精品久久91| 四虎影视久久| 精品国产亚一区二区三区| 欧美激情一区二区三区视频 | 99久久精品国产麻豆| 国产视频网站在线观看| 麻豆网站在线看| 欧美a级大片| 国产亚洲精品成人a在线| 国产一区二区精品在线观看| 欧美激情一区二区三区在线| 日韩在线观看免费完整版视频| 可以免费看污视频的网站| 国产91丝袜在线播放0| 成人免费观看网欧美片| 国产网站在线| 国产一区二区精品尤物| 欧美爱色| 国产高清视频免费| 精品久久久久久中文| 成人在激情在线视频| 国产高清视频免费观看| 日本免费区| 韩国毛片免费| 久久99爰这里有精品国产| 精品久久久久久中文字幕2017| 午夜在线亚洲| 国产国产人免费视频成69堂| 黄色短视频网站| 国产a免费观看| a级黄色毛片免费播放视频 | 国产网站免费| 欧美大片一区| 国产伦精品一区二区三区在线观看| 国产网站免费视频| 国产一区二区高清视频| 成人影院久久久久久影院| 深夜做爰性大片中文| 欧美激情中文字幕一区二区| 超级乱淫黄漫画免费| 日韩专区在线播放| 久久精品大片| 你懂的日韩| 日韩一级黄色| 四虎影视久久| 日本免费乱理伦片在线观看2018| 国产91视频网| 可以免费看污视频的网站| 日韩免费在线视频| 日韩字幕在线| 国产麻豆精品hdvideoss| 一本伊大人香蕉高清在线观看| 99热精品在线| 亚洲女人国产香蕉久久精品| 亚洲女人国产香蕉久久精品 | 青青青草影院| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 精品久久久久久影院免费| 国产原创视频在线| 天天做日日爱夜夜爽| 国产精品1024永久免费视频 | 免费一级片在线观看| 一级毛片视频在线观看| 日本特黄特黄aaaaa大片| 午夜欧美福利| 国产成人精品综合在线| 午夜家庭影院| 亚洲精品影院| 美女被草网站| 九九九在线视频| 国产精品12| a级黄色毛片免费播放视频 | 亚州视频一区二区| 亚洲第一色在线| 精品久久久久久综合网| 日本伦理网站| 日韩av片免费播放| 日韩中文字幕一区二区不卡| 国产精品12| a级黄色毛片免费播放视频 | 日韩一级黄色| 国产a网| 91麻豆国产| 亚洲精品影院| 精品国产香蕉在线播出| 精品视频在线观看一区二区 | 99久久精品国产高清一区二区| 99热精品在线| 成人免费高清视频| 久久精品免视看国产明星| 亚洲不卡一区二区三区在线 | 深夜做爰性大片中文| 日韩在线观看视频免费| 精品美女| 欧美一级视| 国产一区精品| 精品国产一区二区三区久久久狼| 精品毛片视频| 91麻豆国产| 香蕉视频一级| 久久精品免视看国产成人2021| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 成人免费观看的视频黄页| 国产精品自拍在线观看| 欧美一级视| 91麻豆精品国产高清在线| 精品视频一区二区三区| 国产一区精品| 国产不卡在线观看| 亚洲天堂在线播放| 国产精品自拍在线| 日本特黄特黄aaaaa大片| 日韩在线观看免费| 日韩中文字幕一区| 亚久久伊人精品青青草原2020| 91麻豆国产福利精品| 亚洲第一色在线| 四虎久久精品国产| 国产精品自拍在线| 国产成人精品综合在线| 青青久在线视频| 国产视频在线免费观看| 青青青草影院 | 精品国产一区二区三区久久久狼| 你懂的福利视频| 国产成人女人在线视频观看| 可以免费在线看黄的网站| 欧美a级片视频| 日日夜人人澡人人澡人人看免| 日韩欧美一二三区| 日本在线不卡免费视频一区| 欧美激情伊人| 99久久精品国产麻豆| 久久精品大片| 精品国产亚一区二区三区| 免费的黄视频| 国产一区二区精品久久91| 九九干| 91麻豆tv| 成人影院一区二区三区| 国产极品精频在线观看| 国产综合成人观看在线| 中文字幕一区二区三区精彩视频 | 国产91丝袜在线播放0| 国产高清在线精品一区二区| 久草免费在线视频| 精品国产亚洲人成在线| 99色精品| 欧美激情一区二区三区视频 | 日韩专区亚洲综合久久| 日韩免费在线视频| a级毛片免费观看网站| 色综合久久天天综线观看| 沈樵在线观看福利| 精品国产亚洲一区二区三区| 九九久久99综合一区二区| 在线观看成人网 | 欧美大片一区| 亚欧成人毛片一区二区三区四区| 精品在线免费播放| 日本免费区| 久久久久久久网| 日本免费乱理伦片在线观看2018| 亚欧视频在线| 九九免费高清在线观看视频| 久久福利影视| 国产一区二区福利久久| 久草免费在线观看| 精品美女| 九九久久99综合一区二区| 国产精品自拍在线观看| 精品视频在线观看视频免费视频| 二级特黄绝大片免费视频大片|