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

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

賦值
類型對象
當(dāng)自定義類型實(shí)現(xiàn)了接口類型中聲明的所有函數(shù)時(shí),則該類型的對象可以賦值給接口變量,并使用接口變量調(diào)用實(shí)現(xiàn)的接口
-
方法接收者全為值類型的方法
13.03.png13.04.png -
方法接收者全為指針類型的
13.05.png13.06.png -
方法接收者既有值類型又有指針類型的
13.07.png賦值應(yīng)該使用哪一個(gè)?原因?
13.08.png13.09.png -
問題
13.10.png
接口對象
當(dāng)接口(A)包含另外一個(gè)接口(B)中聲明的所有函數(shù)時(shí)(A接口函數(shù)時(shí)B接口函數(shù)的父集,B時(shí)A的子集),則接口(A)的對象也可以賦值給其子集的接口(B)變量


若兩個(gè)接口聲明同樣的函數(shù)簽名,則者兩個(gè)接口完全等價(jià)
當(dāng)類型和父集接口賦值給接口變量口,只能調(diào)用接口變量定義接口中聲明的函數(shù)(方法)
類型斷言&查詢
當(dāng)父集接口或者類型對象賦值給接口變量后,需要將接口變量重新轉(zhuǎn)換為原來的類型,需要使用類型斷言/查詢
斷言
語法: 接口變量.(Type)

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

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

實(shí)現(xiàn)

使用

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

空接口
不包含任何函數(shù)簽名的接口叫空接口,空接口聲明的變量可以賦值為任何類型的變量(任意接口)
定義
語法: interface{}

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









