您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Go中怎么實現(xiàn)面向?qū)ο蟆?,?nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學習一下“Go中怎么實現(xiàn)面向?qū)ο蟆边@篇文章吧。
在大家初識 Go 語言時,總會拿其他語言的基本特性來類比 Go 語言,說白了就是老知識和新知識產(chǎn)生關(guān)聯(lián),實現(xiàn)更高的學習效率。
面向?qū)ο缶幊?OOP)是一種基于 "對象" 概念的編程范式,它可以包含數(shù)據(jù)和代碼:數(shù)據(jù)以字段的形式存在(通常稱為屬性或?qū)傩?,代碼以程序的形式存在(通常稱為方法)。
對象自己的程序可以訪問并經(jīng)常修改自己的數(shù)據(jù)字段。
對象經(jīng)常被定義為類的一個實例。
對象利用屬性和方法的私有/受保護/公共可見性,對象的內(nèi)部狀態(tài)受到保護,不受外界影響(被封裝)。
基于這幾個基本認知進行一步延伸出,面向?qū)ο蟮娜蠡咎匦裕?/p>
封裝。
繼承。
多態(tài)。
至此對面向?qū)ο蟮幕靖拍钪v解結(jié)束,想更進一步了解的可自行網(wǎng)上沖浪。
“Go 語言是否一門面向?qū)ο蟮恼Z言?”,這是一個日經(jīng)話題。官方 FAQ 給出的答復是:
Go 有類型和方法,并且允許面向?qū)ο蟮木幊田L格,但沒有類型層次。
Go 中的 "接口 "概念提供了一種不同的方法,我們認為這種方法易于使用,而且在某些方面更加通用。還有一些方法可以將類型嵌入到其他類型中,以提供類似的東西,但不等同于子類。
Go 中的方法比 C++ 或 Java 中的方法更通用:它們可以為任何類型的數(shù)據(jù)定義,甚至是內(nèi)置類型,如普通的、"未裝箱的 "整數(shù)。它們并不局限于結(jié)構(gòu)(類)。
Go 由于缺乏類型層次,Go 中的 "對象 "比 C++ 或 Java 等語言更輕巧。
封裝
面向?qū)ο笾械?“封裝” 指的是可以隱藏對象的內(nèi)部屬性和實現(xiàn)細節(jié),僅對外提供公開接口調(diào)用,這樣子用戶就不需要關(guān)注你內(nèi)部是怎么實現(xiàn)的。
在 Go 語言中的屬性訪問權(quán)限,通過首字母大小寫來控制:
首字母大寫,代表是公共的、可被外部訪問的。
首字母小寫,代表是私有的,不可以被外部訪問。
Go 語言的例子如下:
type Animal struct { name string } func NewAnimal() *Animal { return &Animal{} } func (p *Animal) SetName(name string) { p.name = name } func (p *Animal) GetName() string { return p.name }
在上述例子中,我們聲明了一個結(jié)構(gòu)體 Animal,其屬性 name 為小寫。沒法通過外部方法,在配套上存在 Setter 和 Getter 的方法,用于統(tǒng)一的訪問和設置控制。
以此實現(xiàn)在 Go 語言中的基本封裝。
面向?qū)ο笾械?“繼承” 指的是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。
以上是“Go中怎么實現(xiàn)面向?qū)ο蟆边@篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。