1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      Go接口interface如何使用

      go 的接口在go的編程里面用的十分頻繁,尤其是空接口的使用,因?yàn)橛辛私涌冢攀沟肎o語言變得異常的強(qiáng)大。下面由創(chuàng)新互聯(lián)小編給大家講解Go接口interface如何使用。

      成都創(chuàng)新互聯(lián)主打移動(dòng)網(wǎng)站、網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站改版、網(wǎng)絡(luò)推廣、網(wǎng)站維護(hù)、域名注冊、等互聯(lián)網(wǎng)信息服務(wù),為各行業(yè)提供服務(wù)。在技術(shù)實(shí)力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務(wù),根據(jù)網(wǎng)站的內(nèi)容與功能再?zèng)Q定采用什么樣的設(shè)計(jì)。最后,要實(shí)現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設(shè)計(jì),我們還會(huì)規(guī)劃穩(wěn)定安全的技術(shù)方案做保障。

      Go接口interface如何使用

      關(guān)于接口的概念:

      1.接口是一個(gè)或多個(gè)方法簽名的集合

      2.只要某個(gè)類型擁有該接口的所有方法簽名,就算實(shí)現(xiàn)了該接口,無需顯示聲明實(shí)現(xiàn)了哪個(gè)接口,這稱之為 Structural Typing

      3.接口只有方法聲明,沒有實(shí)現(xiàn),沒有數(shù)據(jù)結(jié)構(gòu)字段

      4.接口可以匿名嵌入其他接口,或者嵌入到接口中

      5.將對象復(fù)制給接口,會(huì)發(fā)生拷貝,而接口內(nèi)部存儲(chǔ)的是指向這個(gè)復(fù)制品的指針,即無法修改復(fù)制品的狀態(tài),也無法獲取指針

      6.接口調(diào)用不會(huì)做receiver的自動(dòng)轉(zhuǎn)換

      7.接口也可以實(shí)現(xiàn)類似OOP中的多態(tài)

      8.空接口可以作為任何類型數(shù)據(jù)的容器

      現(xiàn)在開始介紹一下最基礎(chǔ)的interface。 介紹一下概念2

      package main
       
      import (
      	"fmt"
      )
      type USB interface {   // 定義一個(gè)USB接口 ,該接口擁有PhoneConnect的所有方法簽名,
      	Name() string       //即就實(shí)現(xiàn)了PhoneConnect的接口,無需在聲明。這就是上面說的第2條
      	Connect()
      }
      type PhoneConnect struct {   //定義的結(jié)構(gòu)體
      	name string
      }
      func (pc PhoneConnect) Name() string{  //上面結(jié)構(gòu)體的方法
      	return pc.name
      }
      func (pc PhoneConnect) Connect(){
      	fmt.Println("Connectd to: ",pc.name)
      }
       
      func main(){    
      	var a USB      //聲明該接口
      	a = PhoneConnect{"IPhone"}  //該接口已經(jīng)支持PhoneConnect這個(gè)結(jié)構(gòu)體了。初始化該結(jié)構(gòu)體
      	a.Connect()     //調(diào)用該結(jié)構(gòu)體的Connect方法
      }

      如果上面的例子看明白了的話接著往下看。

      再定義一個(gè)函數(shù),接收參數(shù)為USB類型。把a(bǔ)傳進(jìn)去,其實(shí)a已經(jīng)可以調(diào)用phoneConnect的所有方法了。而且這時(shí),我把a(bǔ)的聲明弄得含糊點(diǎn)。

      func Disconnect(usb USB){
      	fmt.Println("Discounnectd from:",usb.Name())
      }
      func main(){
      	a := PhoneConnect{"IPhone"}  //a是什么類型呢?
      	fmt.Println("type:",reflect.TypeOf(a))
      	Disconnect(a)
      }

      看看運(yùn)行結(jié)果:

      type: main.PhoneConnect
      Discounnectd from: IPhone

      a是一個(gè)被實(shí)例化的PhoneConnect類型的結(jié)構(gòu)體,但Disconnect函數(shù)要求接收一個(gè)USB類型的數(shù)據(jù),a竟然可以傳遞進(jìn)來!!!

      再來看看概念7:

      type USB interface {   // 定義一個(gè)USB接口 ,該接口擁有PhoneConnect的所有方法簽名,
      	Name() string       //
      	Connect             //嵌入了一個(gè)Connect接口,效果和最開始演示的是一樣的
      }
      type Connect interface {
      	Connect()
      }

      那任何結(jié)構(gòu)體滿足擁有Name()和Connect()方法就可以看作是一個(gè)USB。是不是有些不妥,DisConnect()函數(shù)萬一我傳遞進(jìn)去的USB不是手機(jī)呢??這就用個(gè)ok-pattern就可以了。比如,我再加一個(gè)電視這個(gè)結(jié)構(gòu)體,電視也有usb接口。

      type TVConnect struct {
      	name string
      }
      func (tc TVConnect) Name() string{
      	return tc.name
      }
      func (tc TVConnect) Connect() {
      	fmt.Println("Connect to: ",tc.name)
      }
      func Disconnect(usb USB){
      	if rs,ok := usb.(PhoneConnect);ok{
      		fmt.Println("Disconnect: ",rs.name)
      	}else{
      		fmt.Println("Unknown device: ")
      	}
      }
      func main(){
      	a := PhoneConnect{"IPhone"}
      	b := TVConnect{"ChuangWei"}
      	Disconnect(a)
      	Disconnect(b)
      }

      看看打印結(jié)果:

      Disconnect:  IPhone
      Unknown device:

      b是一個(gè)創(chuàng)維電視的usb接口,但是b在Disconnect函數(shù)里沒有被識(shí)別,因?yàn)樗且粋€(gè)TV。

      再次進(jìn)階。那既然可以在Disconnect函數(shù)里面再判斷傳進(jìn)來的數(shù)據(jù)的結(jié)構(gòu),那么就不用再管USB接口類型了吧。直接定義成空接口。不就就完了,反正我是在函數(shù)里面判斷你是什么類型呢。

      func Disconnect(usb interface{}){   //注意,這里是空接口
      	switch v:=usb.(type) {
      	case PhoneConnect:
      		fmt.Println(" Phone device Disconnected from",v.name)
      	case TVConnect:
      		fmt.Println("TV device Disconnected from",v.name)
      	default:
      		fmt.Println("Unknown device ...")
      	}
      }
      func main(){
      	a := PhoneConnect{"IPhone"}
      	b := TVConnect{"ChuangWei"}
      	Disconnect(a)
      	Disconnect(b)
      }

      看看打印情況:

      Phone device : Disconnected from IPhone
      TV device : Disconnected from ChuangWei

      關(guān)于Go接口interface如何使用就分享到這里了,希望以上內(nèi)容可以對大家有一定的參考價(jià)值,可以學(xué)以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。


      標(biāo)題名稱:Go接口interface如何使用
      文章起源:http://ef60e0e.cn/article/gseodg.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        海丰县| 清镇市| 五台县| 富民县| 松潘县| 岳普湖县| 彭山县| 潼南县| 家居| 休宁县| 大连市| 临夏县| 体育| 临颍县| 红桥区| 阳江市| 南昌县| 察雅县| 黄骅市| 天气| 库伦旗| 安龙县| 莆田市| 湖北省| 土默特左旗| 乐业县| 南皮县| 英山县| 莒南县| 开封县| 宜黄县| 五原县| 横峰县| 托克逊县| 扬州市| 扶余县| 天峨县| 雷州市| 泉州市| 图片| 卫辉市|