AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

Go語言中的面向?qū)ο缶幊?OOP)

來源: 責(zé)編: 時間:2024-01-08 09:15:37 213觀看
導(dǎo)讀在Go語言中,雖然沒有像面向?qū)ο笳Z言那樣的類,但通過結(jié)構(gòu)體類型和方法,仍然支持部分面向?qū)ο缶幊蹋∣OP)的概念。封裝(Encapsulation)封裝是一種將一個對象的實現(xiàn)細節(jié)隱藏起來,使其對其他對象不可見的做法,這樣可以實現(xiàn)解耦。例如

在Go語言中,雖然沒有像面向?qū)ο笳Z言那樣的類,但通過結(jié)構(gòu)體類型和方法,仍然支持部分面向?qū)ο缶幊蹋∣OP)的概念。0pZ28資訊網(wǎng)——每日最新資訊28at.com

封裝(Encapsulation)

封裝是一種將一個對象的實現(xiàn)細節(jié)隱藏起來,使其對其他對象不可見的做法,這樣可以實現(xiàn)解耦。0pZ28資訊網(wǎng)——每日最新資訊28at.com

例如,考慮以下結(jié)構(gòu)體:0pZ28資訊網(wǎng)——每日最新資訊28at.com

type Student struct{  name string  rollNo uint64}

其中的name和rollNo字段是私有的,因為它們以小寫字母開頭。為了提供公共訪問,可以為這些字段定義對應(yīng)的getter和setter方法。0pZ28資訊網(wǎng)——每日最新資訊28at.com

func (s *Student) GetName() string {  return s.name}func (s *Student) SetName(name string) {  s.name = name}func (s *Student) GetRollNo() uint64 {  return s.rollNo}func (s *Student) SetRollNo(roll uint64) {  s.rollNo = roll}

現(xiàn)在,程序的其他部分也可以創(chuàng)建Student結(jié)構(gòu)體的對象,并通過公共的getter和setter方法訪問name和rollNo,從而實現(xiàn)了封裝。0pZ28資訊網(wǎng)——每日最新資訊28at.com

抽象(Abstraction)

數(shù)據(jù)抽象是一種設(shè)計模式,其中數(shù)據(jù)僅對語義相關(guān)的函數(shù)可見,以防止誤用。數(shù)據(jù)抽象的成功導(dǎo)致在面向?qū)ο蠛图兒瘮?shù)式編程中頻繁地將數(shù)據(jù)隱藏作為設(shè)計原則。0pZ28資訊網(wǎng)——每日最新資訊28at.com

在Go語言中,可以通過接口實現(xiàn)抽象。接口定義了一組必須實現(xiàn)的方法,以滿足接口的要求。0pZ28資訊網(wǎng)——每日最新資訊28at.com

例如,考慮以下接口:0pZ28資訊網(wǎng)——每日最新資訊28at.com

type iStudent interface{  calcPercentage() float64}

該接口定義了一個名為calcPercentage()的方法,用于計算學(xué)生的百分比。0pZ28資訊網(wǎng)——每日最新資訊28at.com

繼承(Inheritance)

在Go語言中,不支持傳統(tǒng)意義上的繼承。相反,Go使用組合來實現(xiàn)類似的功能。一個結(jié)構(gòu)體可以嵌入另一個結(jié)構(gòu)體,從而繼承其字段和方法。0pZ28資訊網(wǎng)——每日最新資訊28at.com

例如,考慮以下結(jié)構(gòu)體:0pZ28資訊網(wǎng)——每日最新資訊28at.com

type Person struct { name string age  uint64}type Student struct { Person studentID uint64}

在這里,Student結(jié)構(gòu)體嵌入了Person結(jié)構(gòu)體,這意味著它繼承了Person的name字段。Student結(jié)構(gòu)體還有自己的studentID字段。現(xiàn)在,任何對Person操作的方法也可以對Student操作,因為Student是一個帶有額外字段的Person。0pZ28資訊網(wǎng)——每日最新資訊28at.com

多態(tài)(Polymorphism)

多態(tài)是指調(diào)用代碼可以獨立于所支持層次結(jié)構(gòu)中的類(父類或其子類)而運行的情況。0pZ28資訊網(wǎng)——每日最新資訊28at.com

在Go語言中,可以通過使用接口來實現(xiàn)多態(tài)。由于Go是一種靜態(tài)類型的語言,變量的類型必須在編譯時已知。然而,通過使用接口,可以編寫可以在滿足相同接口要求的不同類型上操作的代碼,而無需在編譯時知道其具體類型。0pZ28資訊網(wǎng)——每日最新資訊28at.com

例如,考慮以下代碼:0pZ28資訊網(wǎng)——每日最新資訊28at.com

func PrintStudentDetails(s *Student) {  fmt.Println("Student Name:", s.GetName())  fmt.Println("Student Age:", s.GetAge())  fmt.Println("Percentage",s.CalcPercentage())}

現(xiàn)在,我們可以將任何實現(xiàn)了PrintStudentDetails()方法的類型作為參數(shù)調(diào)用該函數(shù),比如Student類型,它會顯示該學(xué)生的詳細信息。這就是多態(tài)的實現(xiàn)。0pZ28資訊網(wǎng)——每日最新資訊28at.com

完整的面向?qū)ο缶幊淘贕o中的示例:0pZ28資訊網(wǎng)——每日最新資訊28at.com

package mainimport "fmt"type Shape interface { Area() float64}type Triangle struct { Base, Height float64}func (t Triangle) Area() float64 { return 0.5 * t.Base * t.Height}type Square struct { Side float64}func (s Square) Area() float64 { return s.Side * s.Side}type Rectangle struct { Length, Breadth float64}func (r Rectangle) Area() float64 { return r.Length * r.Breadth}func printArea(s Shape) { fmt.Println("Area of shape is : ", s.Area())}func main() { t := Triangle{Base: 10, Height: 20} printArea(t)    //Area of shape is :  100 s := Square{Side: 20} printArea(s)    //Area of shape is :  400 r := Rectangle{Length: 20, Breadth: 10} printArea(r)    //Area of shape is :  200}

本文鏈接:http://www.tebozhan.com/showinfo-26-57876-0.htmlGo語言中的面向?qū)ο缶幊?OOP)

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Istio多集群實踐,你都學(xué)會了嗎?

下一篇: Go 語言中 defer 使用時有哪些陷阱?

標簽:
  • 熱門焦點
  • Find N3入網(wǎng):最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經(jīng)正式入網(wǎng),型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • 7月安卓手機性價比榜:努比亞+紅魔兩款新機入榜

    7月登場的新機有努比亞Z50S Pro和紅魔8S Pro,除了三星之外目前唯二的兩款搭載超頻版驍龍8Gen2處理器的產(chǎn)品,而且努比亞和紅魔也一貫有著不錯的性價比,所以在本次的性價比榜單
  • 6月iOS設(shè)備性能榜:M2穩(wěn)居榜首 A系列只能等一手3nm來救

    沒有新品發(fā)布,自然iOS設(shè)備性能榜的上榜設(shè)備就沒有什么更替,僅僅只有跑分變化而產(chǎn)生的排名變動,畢竟蘋果新品的發(fā)布節(jié)奏就是這樣的,一年下來也就幾個移動端新品,不會像安卓廠商,一
  • JavaScript學(xué)習(xí) -AES加密算法

    引言在當(dāng)今數(shù)字化時代,前端應(yīng)用程序扮演著重要角色,用戶的敏感數(shù)據(jù)經(jīng)常在前端進行加密和解密操作。然而,這樣的操作在網(wǎng)絡(luò)傳輸和存儲中可能會受到惡意攻擊的威脅。為了確保數(shù)據(jù)
  • 只需五步,使用start.spring.io快速入門Spring編程

    步驟1打開https://start.spring.io/,按照屏幕截圖中的內(nèi)容創(chuàng)建項目,添加 Spring Web 依賴項,并單擊“生成”按鈕下載 .zip 文件,為下一步做準備。請在進入步驟2之前進行解壓。圖
  • 19個 JavaScript 單行代碼技巧,讓你看起來像個專業(yè)人士

    今天這篇文章跟大家分享18個JS單行代碼,你只需花幾分鐘時間,即可幫助您了解一些您可能不知道的 JS 知識,如果您已經(jīng)知道了,就當(dāng)作復(fù)習(xí)一下,古人云,溫故而知新嘛。現(xiàn)在,我們就開始今
  • 騰訊蓋樓,字節(jié)拆墻

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之“想重溫暴刷深淵、30+技能搭配暴搓到爽的游戲體驗嗎?一起上晶核,即刻暴打!”曾憑借直播騰訊旗下代理格斗游戲《DNF》一
  • 新電商三兄弟,“抖快紅”成團!

    來源:價值研究所作 者:Hernanderz 隨著內(nèi)容電商的概念興起,抖音、快手、小紅書組成的“新電商三兄弟”成為業(yè)內(nèi)一股不可忽視的勢力,給阿里、京東、拼多多帶去了巨大壓
  • 小米MIX Fold 3配置細節(jié)曝光:搭載領(lǐng)先版驍龍8 Gen2+罕見5倍長焦

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
Top