溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

golang接口如何實(shí)現(xiàn)

發(fā)布時(shí)間:2022-12-27 09:18:32 來(lái)源:億速云 閱讀:107 作者:iii 欄目:編程語(yǔ)言

今天小編給大家分享一下golang接口如何實(shí)現(xiàn)的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。

在golang中,可以使用“type 接口類型名 interface{方法名1( 參數(shù)列表1 ) 返回值列表1 方法名2( 參數(shù)列表2 ) 返回值列表2…}”語(yǔ)句來(lái)聲明接口;當(dāng)“方法名”首字母是大寫時(shí),且“接口類型名”首字母也是大寫時(shí),這個(gè)方法可以被接口所在的包(package)之外的代碼訪問(wèn)。

Go語(yǔ)言不是一種 “傳統(tǒng)” 的面向?qū)ο缶幊陶Z(yǔ)言:它里面沒(méi)有類和繼承的概念。

但是Go語(yǔ)言里有非常靈活的接口概念,通過(guò)它可以實(shí)現(xiàn)很多面向?qū)ο蟮奶匦?。很多面向?qū)ο蟮恼Z(yǔ)言都有相似的接口概念,但Go語(yǔ)言中接口類型的獨(dú)特之處在于它是滿足隱式實(shí)現(xiàn)的。也就是說(shuō),我們沒(méi)有必要對(duì)于給定的具體類型定義所有滿足的接口類型;簡(jiǎn)單地?fù)碛幸恍┍匦璧姆椒ň妥銐蛄恕?/p>

這種設(shè)計(jì)可以讓你創(chuàng)建一個(gè)新的接口類型滿足已經(jīng)存在的具體類型卻不會(huì)去改變這些類型的定義;當(dāng)我們使用的類型來(lái)自于不受我們控制的包時(shí)這種設(shè)計(jì)尤其有用。

接口類型是對(duì)其它類型行為的抽象和概括;因?yàn)榻涌陬愋筒粫?huì)和特定的實(shí)現(xiàn)細(xì)節(jié)綁定在一起,通過(guò)這種抽象的方式我們可以讓我們的函數(shù)更加靈活和更具有適應(yīng)能力。

接口是雙方約定的一種合作協(xié)議。接口實(shí)現(xiàn)者不需要關(guān)心接口會(huì)被怎樣使用,調(diào)用者也不需要關(guān)心接口的實(shí)現(xiàn)細(xì)節(jié)。接口是一種類型,也是一種抽象結(jié)構(gòu),不會(huì)暴露所含數(shù)據(jù)的格式、類型及結(jié)構(gòu)。

接口聲明的格式

每個(gè)接口類型由數(shù)個(gè)方法組成。接口的形式代碼如下:

type 接口類型名 interface{
    方法名1( 參數(shù)列表1 ) 返回值列表1
    方法名2( 參數(shù)列表2 ) 返回值列表2
    …
}

對(duì)各個(gè)部分的說(shuō)明:

  • 接口類型名:使用 type 將接口定義為自定義的類型名。Go語(yǔ)言的接口在命名時(shí),一般會(huì)在單詞后面添加 er,如有寫操作的接口叫 Writer,有字符串功能的接口叫 Stringer,有關(guān)閉功能的接口叫 Closer 等。

  • 方法名:當(dāng)方法名首字母是大寫時(shí),且這個(gè)接口類型名首字母也是大寫時(shí),這個(gè)方法可以被接口所在的包(package)之外的代碼訪問(wèn)。

  • 參數(shù)列表、返回值列表:參數(shù)列表和返回值列表中的參數(shù)變量名可以被忽略,例如:

type writer interface{
    Write([]byte) error
}

開(kāi)發(fā)中常見(jiàn)的接口及寫法

Go語(yǔ)言提供的很多包中都有接口,例如 io 包中提供的 Writer 接口:

type Writer interface {
    Write(p []byte) (n int, err error)
}

這個(gè)接口可以調(diào)用 Write() 方法寫入一個(gè)字節(jié)數(shù)組([]byte),返回值告知寫入字節(jié)數(shù)(n int)和可能發(fā)生的錯(cuò)誤(err error)。

類似的,還有將一個(gè)對(duì)象以字符串形式展現(xiàn)的接口,只要實(shí)現(xiàn)了這個(gè)接口的類型,在調(diào)用 String() 方法時(shí),都可以獲得對(duì)象對(duì)應(yīng)的字符串。在 fmt 包中定義如下:

type Stringer interface {
    String() string
}

Stringer 接口在Go語(yǔ)言中的使用頻率非常高,功能類似于 Java 或者 C# 語(yǔ)言里的 ToString 的操作。

Go語(yǔ)言的每個(gè)接口中的方法數(shù)量不會(huì)很多。Go語(yǔ)言希望通過(guò)一個(gè)接口精準(zhǔn)描述它自己的功能,而通過(guò)多個(gè)接口的嵌入和組合的方式將簡(jiǎn)單的接口擴(kuò)展為復(fù)雜的接口。本章后面的小節(jié)中會(huì)介紹如何使用組合來(lái)擴(kuò)充接口。

以上就是“golang接口如何實(shí)現(xiàn)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI