溫馨提示×

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

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

go語(yǔ)言是面向?qū)ο缶幊虇?/h1>
發(fā)布時(shí)間:2020-06-09 14:25:22 來(lái)源:億速云 閱讀:346 作者:鴿子 欄目:編程語(yǔ)言

go語(yǔ)言中,雖然沒(méi)有明確提出面向?qū)ο蟮母拍?,但是基于已有的語(yǔ)法設(shè)計(jì),我們也可以寫(xiě)出面向?qū)ο蟮拇a。go語(yǔ)言中的面向?qū)ο笫墙柚鷖truct結(jié)構(gòu)體實(shí)現(xiàn)的。   

Golang實(shí)現(xiàn)面向?qū)ο蟮膬蓚€(gè)關(guān)鍵類(lèi)型是struct和interface,其中struct類(lèi)似C++的普通類(lèi)類(lèi)型,interface則對(duì)應(yīng)抽象類(lèi)類(lèi)型。

與C++采用public/protected/private指示成員和方法的可見(jiàn)性不同,Golang采用大小寫(xiě)標(biāo)識(shí)可見(jiàn)性,即大寫(xiě)字母開(kāi)頭的成員/方法對(duì)外可見(jiàn),小寫(xiě)開(kāi)頭的則屬于類(lèi)的私有成員,外部不可以直接訪問(wèn)。

此外,Golang與C++在類(lèi)類(lèi)型的定義上還有一個(gè)重要區(qū)別,那就是Golang在struct內(nèi)只需要聲明類(lèi)的成員變量,而不需要在類(lèi)定義體內(nèi)聲明或定義所有的方法,方法定義都在struct之外完成。

Golang通過(guò)struct定義類(lèi)的屬性,通過(guò)在func定義時(shí)傳入類(lèi)對(duì)象的方式定義類(lèi)的方法,其中屬性和方法的公有/私有屬性是通過(guò)首字母的大小寫(xiě)決定的。

type Student struct {
	name  string
	age   int
	major string
}

Golang沒(méi)有完整實(shí)現(xiàn)繼承,而是通過(guò)組合的方式實(shí)現(xiàn)。組合類(lèi)(子類(lèi))可以直接調(diào)用被組合類(lèi)(基類(lèi))的公有方法,訪問(wèn)基類(lèi)的公有屬性,子類(lèi)也可以定義自己的屬性,以及實(shí)現(xiàn)自己特有的方法。

Golang的設(shè)計(jì)哲學(xué)之一就是簡(jiǎn)潔,通過(guò)大小寫(xiě)區(qū)分成員/方法的公有/私有屬性,通過(guò)組合的方式實(shí)現(xiàn)繼承,都是簡(jiǎn)潔哲學(xué)的體現(xiàn)。

Golang的interface類(lèi)型定義的也是一個(gè)抽象的基類(lèi),它是一組方法的集合,任何完整實(shí)現(xiàn)這些方法的類(lèi)型都被稱(chēng)為該接口的實(shí)現(xiàn)。由于抽象與多態(tài)是相輔相成的,或者說(shuō)抽象的目的就是為了實(shí)現(xiàn)多態(tài)。

以上就是golang 是面向?qū)ο蟮拿吹脑敿?xì)內(nèi)容,更多請(qǐng)關(guān)注億速云其它相關(guān)文章!

向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