国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Golang 中的接口詳解

這篇具有很好參考價(jià)值的文章主要介紹了Golang 中的接口詳解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

什么是接口:接口(interface)定義了一個(gè)對(duì)象的行為規(guī)范,只定義規(guī)范不實(shí)現(xiàn),由具體的對(duì)象來(lái)實(shí)現(xiàn)規(guī)范的細(xì)節(jié)。

接口

Golang 接口的定義

在Go語(yǔ)言中接口(interface)是一種類(lèi)型,一種抽象的類(lèi)型。

interface是一組method的集合,是duck-type programming的一種體現(xiàn)。

接口做的事情就像是定義一個(gè)協(xié)議(規(guī)則),只要一臺(tái)機(jī)器有洗衣服和甩干的功能,我就稱(chēng)它為洗衣機(jī)。不關(guān)心屬性(數(shù)據(jù)),只關(guān)心行為(方法)。

前提概要:

(1)接口中可以定義一組方法,但不需要實(shí)現(xiàn),不需要方法體。并且接口中不能包含任何變量。到某個(gè)自定義類(lèi)型要使用的時(shí)候(實(shí)現(xiàn)接口的時(shí)候),再根據(jù)具體情況把這些方法具體實(shí)現(xiàn)出來(lái)。
(2)實(shí)現(xiàn)接口要實(shí)現(xiàn)所有的方法才是實(shí)現(xiàn)。
(3)Golang中的接口不需要顯式的實(shí)現(xiàn)接口。Golang中沒(méi)有implement關(guān)鍵字。
(Golang中實(shí)現(xiàn)接口是基于方法的,不是基于接口的)


例如:
A接口 a,b方法
B接口 a,b方法
C結(jié)構(gòu)體 實(shí)現(xiàn)了 ?a,b方法 ,那么C實(shí)現(xiàn)了A接口,也可以說(shuō)實(shí)現(xiàn)了B接口 ? (只要實(shí)現(xiàn)全部方法即可,和實(shí)際接口耦合性很低,比Java松散得多)
(4)接口目的是為了定義規(guī)范,具體由別人來(lái)實(shí)現(xiàn)即可。

為什么要使用接口

type Cat struct{}

func (c Cat) Say() string { return "喵喵喵" }

type Dog struct{}

func (d Dog) Say() string { return "汪汪汪" }

func main() {
    c := Cat{}
    fmt.Println("貓:", c.Say())
    d := Dog{}
    fmt.Println("狗:", d.Say())
}

上面的代碼中定義了貓和狗,然后它們都會(huì)叫,你會(huì)發(fā)現(xiàn)main函數(shù)中明顯有重復(fù)的代碼,如果我們后續(xù)再加上豬、青蛙等動(dòng)物的話,我們的代碼還會(huì)一直重復(fù)下去。那我們能不能把它們當(dāng)成“能叫的動(dòng)物”來(lái)處理呢?

像類(lèi)似的例子在我們編程過(guò)程中會(huì)經(jīng)常遇到:

比如一個(gè)網(wǎng)上商城可能使用支付寶、微信、銀聯(lián)等方式去在線支付,我們能不能把它們當(dāng)成“支付方式”來(lái)處理呢?

比如三角形,四邊形,圓形都能計(jì)算周長(zhǎng)和面積,我們能不能把它們當(dāng)成“圖形”來(lái)處理呢?

比如銷(xiāo)售、行政、程序員都能計(jì)算月薪,我們能不能把他們當(dāng)成“員工”來(lái)處理呢?

Go語(yǔ)言中為了解決類(lèi)似上面的問(wèn)題,就設(shè)計(jì)了接口這個(gè)概念。接口區(qū)別于我們之前所有的具體類(lèi)型,接口是一種抽象的類(lèi)型。當(dāng)你看到一個(gè)接口類(lèi)型的值時(shí),你不知道它是什么,唯一知道的是通過(guò)它的方法能做什么。

Go語(yǔ)言提倡面向接口編程

    接口是一個(gè)或多個(gè)方法簽名的集合。
    任何類(lèi)型的方法集中只要擁有該接口'對(duì)應(yīng)的全部方法'簽名。
    就表示它 "實(shí)現(xiàn)" 了該接口,無(wú)須在該類(lèi)型上顯式聲明實(shí)現(xiàn)了哪個(gè)接口。
    這稱(chēng)為Structural Typing。
    所謂對(duì)應(yīng)方法,是指有相同名稱(chēng)、參數(shù)列表 (不包括參數(shù)名) 以及返回值。
    當(dāng)然,該類(lèi)型還可以有其他方法。

    接口只有方法聲明,沒(méi)有實(shí)現(xiàn),沒(méi)有數(shù)據(jù)字段。
    接口可以匿名嵌入其他接口,或嵌入到結(jié)構(gòu)中。
    對(duì)象賦值給接口時(shí),會(huì)發(fā)生拷貝,而接口內(nèi)部存儲(chǔ)的是指向這個(gè)復(fù)制品的指針,既無(wú)法修改復(fù)制品的狀態(tài),也無(wú)法獲取指針。
    只有當(dāng)接口存儲(chǔ)的類(lèi)型和對(duì)象都為nil時(shí),接口才等于nil。
    接口調(diào)用不會(huì)做receiver的自動(dòng)轉(zhuǎn)換。
    接口同樣支持匿名字段方法。
    接口也可實(shí)現(xiàn)類(lèi)似OOP中的多態(tài)。
    空接口可以作為任何類(lèi)型數(shù)據(jù)的容器。
    一個(gè)類(lèi)型可實(shí)現(xiàn)多個(gè)接口。
    接口命名習(xí)慣以 er 結(jié)尾。 

接口的定義格式如下:

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

? ?1.接口名:使用type將接口定義為自定義的類(lèi)型名。

Go語(yǔ)言的接口在命名時(shí),一般會(huì)在單詞后面添加er,如有寫(xiě)操作的接口叫Writer,有字符串功能的接口叫Stringer等。接口名最好要能突出該接口的類(lèi)型含義。


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


? ? 3.參數(shù)列表、返回值列表:參數(shù)列表和返回值列表中的參數(shù)變量名可以省略。 ??

接口案例:

演示1:

定義一個(gè) App接口讓 Phone 和 Window?結(jié)構(gòu)體實(shí)現(xiàn)這個(gè)接口
package main

import(
	"fmt"
)

//接口是一個(gè)規(guī)范
type Apper interface{
	start()
	stop()
}
//如果接口里面有方法的話,必要要通過(guò)結(jié)構(gòu)體或者通過(guò)自定義類(lèi)型實(shí)現(xiàn)這個(gè)接口

type Phone_index struct{
	Name string
}
//手機(jī)要實(shí)現(xiàn)usb接口的話必須得實(shí)現(xiàn)usb接口中的所有方法,記住是所有方法
//可以多加方法,后面實(shí)例化可以調(diào)出來(lái),但是接口的所有方法要包含在內(nèi)
func (a Phone_index) start(){
	fmt.Println(a.Name, "啟動(dòng)")
}

func (a Phone_index) stop(){
	fmt.Println(a.Name,"關(guān)閉")
}

type Window_index struct{
	Name string
}

func(b Window_index) start(){
	fmt.Println(b.Name, "啟動(dòng)")
}

func(b Window_index) stop(){
	fmt.Println(b.Name, "關(guān)閉")
}

func(b Window_index) gane(){
	fmt.Println(b.Name, "開(kāi)局亂砂")
}



func main(){
	p := Phone_index{
		Name: "香蕉手機(jī)",
	}
	var p1 Apper
	p1 = p
	p1.start()
	p1.stop()

	w := Window_index{
		Name: "原神",
	}
	var w1 Apper
	w1 = w
	w1.start()
	w1.stop()
	w.gane()




}

幾則注意點(diǎn):文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-636978.html

接口是一個(gè)規(guī)范

如果接口里面有方法的話,必要要通過(guò)結(jié)構(gòu)體或者通過(guò)自定義類(lèi)型實(shí)現(xiàn)這個(gè)接口

手機(jī)要實(shí)現(xiàn)app接口的話必須得實(shí)現(xiàn)app接口中的所有方法,記住是所有方法\

可以多加方法,后面實(shí)例化可以調(diào)出來(lái),但是接口的所有方法要包含在內(nèi)

到了這里,關(guān)于Golang 中的接口詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 深入理解Golang中的接口與實(shí)例展示

    標(biāo)題:深入理解Golang中的接口與實(shí)例展示 引言: Golang(Go)的接口是一項(xiàng)強(qiáng)大的特性,它為面向?qū)ο缶幊處?lái)了靈活性和可維護(hù)性。本文將深入講解Golang中的接口概念,從基礎(chǔ)到實(shí)際應(yīng)用,通過(guò)詳細(xì)案例展示,幫助讀者更好地掌握接口的使用和設(shè)計(jì)。 一、接口基礎(chǔ)概念: 接

    2024年01月21日
    瀏覽(15)
  • Golang中繼承與接口實(shí)現(xiàn)詳解

    探索Golang中通過(guò)嵌套匿名結(jié)構(gòu)體實(shí)現(xiàn)繼承的方法,以及利用接口實(shí)現(xiàn)多態(tài)的原理。深入了解Golang中繼承與接口的應(yīng)用和實(shí)現(xiàn)方式。

    2024年02月11日
    瀏覽(20)
  • Golang中接口類(lèi)型詳解與最佳實(shí)踐(二)

    之前的文章《Golang中的interface(接口)詳解與最佳實(shí)踐》詳細(xì)介紹了接口類(lèi)型的定義、使用方法和最佳實(shí)踐。接口類(lèi)型使得編寫(xiě)可擴(kuò)展、可維護(hù)和可復(fù)用的高質(zhì)量代碼變得更加容易。 還是使用之前文章的例子,例如聲明了如下一個(gè)接口MyInterface: 這個(gè)接口定義了兩個(gè)方法Method

    2024年02月03日
    瀏覽(19)
  • Golang 中的 map 詳解

    Golang 中的 map 詳解

    1、map 的定義 ??在計(jì)算機(jī)科學(xué)里,被稱(chēng)為相關(guān)數(shù)組、map、符號(hào)表或者字典,是由一組 key, value 對(duì)組成的抽象數(shù)據(jù)結(jié)構(gòu),并且同一個(gè) key 只會(huì)出現(xiàn)一次。 ??兩個(gè)關(guān)鍵點(diǎn):map 是由 key-value 對(duì)組成的;key 只會(huì)出現(xiàn)一次。 ??map 的設(shè)計(jì)也被稱(chēng)為 “The dictionary problem(字典問(wèn)題)

    2024年02月14日
    瀏覽(24)
  • Golang 中的信號(hào)(Signal)機(jī)制詳解

    目錄 信號(hào)基礎(chǔ)概念 Golang 對(duì)信號(hào)的處理 信號(hào)處理的使用場(chǎng)景和使用示例 信號(hào)的局限性 Go 中的特殊信號(hào)處理 小結(jié) Signal 是一種操作系統(tǒng)級(jí)別的事件通知機(jī)制,進(jìn)程可以響應(yīng)特定的系統(tǒng)信號(hào)。這些信號(hào)用于指示進(jìn)程執(zhí)行特定的操作,如程序終止、掛起、恢復(fù)等。Golang 的標(biāo)準(zhǔn)庫(kù)

    2024年01月16日
    瀏覽(31)
  • Golang 中的 bufio 包詳解(五):常用函數(shù)

    Golang 中的 bufio 包是帶緩沖 I/O 操作的標(biāo)準(zhǔn)庫(kù),之前的幾篇文章詳細(xì)講解了 bufio.Reader、bufio.Writer 和 bufio.Scanner 這個(gè)幾個(gè)結(jié)構(gòu)體的使用方法、特性和使用場(chǎng)景,本文介紹一下 bufio 包中的函數(shù)。 介紹常用函數(shù)之前,先簡(jiǎn)單介紹下另一個(gè)結(jié)構(gòu)體類(lèi)型和一個(gè)函數(shù)類(lèi)型:bufio.ReadWriter

    2024年02月11日
    瀏覽(15)
  • Golang 中的 time 包詳解(一):time.Time

    在日常開(kāi)發(fā)過(guò)程中,會(huì)頻繁遇到對(duì)時(shí)間進(jìn)行操作的場(chǎng)景,使用 Golang 中的 time 包可以很方便地實(shí)現(xiàn)對(duì)時(shí)間的相關(guān)操作。接下來(lái)的幾篇文章會(huì)詳細(xì)講解 time 包,本文先講解一下 time 包中的結(jié)構(gòu)體 time.Time。 time.Time 類(lèi)型用來(lái)表示一個(gè)具體的時(shí)間點(diǎn),可以精確到納秒。結(jié)構(gòu)體定義和

    2024年02月15日
    瀏覽(22)
  • Golang 中的 archive/zip 包詳解(三):常用函數(shù)

    Golang 中的 archive/zip 包用于處理 ZIP 格式的壓縮文件,提供了一系列用于創(chuàng)建、讀取和解壓縮 ZIP 格式文件的函數(shù)和類(lèi)型,使用起來(lái)非常方便,本文講解下常用函數(shù)。 定義如下: 打開(kāi)一個(gè) ZIP 文件,并返回一個(gè) zip.ReadCloser 類(lèi)型的對(duì)象。簡(jiǎn)單使用示例如下: 定義如下: 創(chuàng)建一個(gè)

    2024年02月10日
    瀏覽(19)
  • Golang 中的 strings 包詳解(一):strings.Builder

    strings.Builder 是 Golang? 中的一個(gè)用于高效構(gòu)建字符串的類(lèi)型,使用了一個(gè)循環(huán)緩沖區(qū)來(lái)存儲(chǔ)字符數(shù)據(jù),避免了頻繁的內(nèi)存分配和拷貝操作,尤其適用于頻繁拼接字符串的場(chǎng)景。結(jié)構(gòu)體定義和對(duì)應(yīng)的方法如下: 其中比較常用的方法有: Reset() :重置 Builder 中的字符串內(nèi)容,使得

    2024年02月09日
    瀏覽(21)
  • Golang 中的 archive/zip 包詳解(二):常用類(lèi)型

    Golang 中的 archive/zip 包用于處理 ZIP 格式的壓縮文件,提供了一系列用于創(chuàng)建、讀取和解壓縮 ZIP 格式文件的函數(shù)和類(lèi)型,使用起來(lái)非常方便。 定義如下: 表示一個(gè) ZIP 文件中的單個(gè)文件的信息,文件的元數(shù)據(jù)信息,例如文件名、文件大小、修改時(shí)間等包含在?FileHeader 中,有

    2024年02月11日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包