13.手撕Go語言-接口

接口是自定義類型,是對是其他類型行為的抽象

定義

接口定義使用interface標(biāo)識,聲明了一系列的函數(shù)簽名
(函數(shù)名、函數(shù)參數(shù)、函數(shù)返回值),在定義接口時(shí)可以指定接口名稱,在后續(xù)聲明接口變量時(shí)使用

13.01.png

聲明

聲明接口變量只需要定義變量類型為接口名,此時(shí)變量被初始化為nil

13.02.png

賦值

類型對象

當(dāng)自定義類型實(shí)現(xiàn)了接口類型中聲明的所有函數(shù)時(shí),則該類型的對象可以賦值給接口變量,并使用接口變量調(diào)用實(shí)現(xiàn)的接口

  1. 方法接收者全為值類型的方法

    13.03.png
    13.04.png
  2. 方法接收者全為指針類型的

    13.05.png
    13.06.png
  3. 方法接收者既有值類型又有指針類型的

    13.07.png

    賦值應(yīng)該使用哪一個(gè)?原因?

    13.08.png
    13.09.png
  4. 問題

    13.10.png

接口對象

當(dāng)接口(A)包含另外一個(gè)接口(B)中聲明的所有函數(shù)時(shí)(A接口函數(shù)時(shí)B接口函數(shù)的父集,B時(shí)A的子集),則接口(A)的對象也可以賦值給其子集的接口(B)變量

13.11.png
13.12.png

若兩個(gè)接口聲明同樣的函數(shù)簽名,則者兩個(gè)接口完全等價(jià)

當(dāng)類型和父集接口賦值給接口變量口,只能調(diào)用接口變量定義接口中聲明的函數(shù)(方法)

類型斷言&查詢

當(dāng)父集接口或者類型對象賦值給接口變量后,需要將接口變量重新轉(zhuǎn)換為原來的類型,需要使用類型斷言/查詢

斷言

語法: 接口變量.(Type)

13.13.png

查詢

可以通過switch-case+接口變量.(type)查詢變量類型,并選擇對應(yīng)的分支塊

13.14.png

接口匿名嵌入

接口之中也可以嵌入已存在的接口,從而實(shí)現(xiàn)接口的擴(kuò)展

定義

13.15.png

實(shí)現(xiàn)

13.16.png

使用

13.17.png

匿名接口

在定義變量時(shí)將類型指定為接口的函數(shù)簽名的接口,此時(shí)叫匿名接口。匿名接口常用于初始化一次接口變量的場景

13.18.png

空接口

不包含任何函數(shù)簽名的接口叫空接口,空接口聲明的變量可以賦值為任何類型的變量(任意接口)

定義

語法: interface{}

13.19.png

使用場景

常聲明函數(shù)參數(shù)類型為interface{},用于接收任意類型的變量

13.20.png
13.21.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容