日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

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

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

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

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

封裝(Encapsulation)

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

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

type Student struct{  name string  rollNo uint64}

其中的name和rollNo字段是私有的,因?yàn)樗鼈円孕懽帜搁_頭。為了提供公共訪問,可以為這些字段定義對(duì)應(yīng)的getter和setter方法。rKL28資訊網(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)體的對(duì)象,并通過公共的getter和setter方法訪問name和rollNo,從而實(shí)現(xiàn)了封裝。rKL28資訊網(wǎng)——每日最新資訊28at.com

抽象(Abstraction)

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

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

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

type iStudent interface{  calcPercentage() float64}

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

繼承(Inheritance)

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

例如,考慮以下結(jié)構(gòu)體:rKL28資訊網(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)在,任何對(duì)Person操作的方法也可以對(duì)Student操作,因?yàn)镾tudent是一個(gè)帶有額外字段的Person。rKL28資訊網(wǎng)——每日最新資訊28at.com

多態(tài)(Polymorphism)

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

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

例如,考慮以下代碼:rKL28資訊網(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)在,我們可以將任何實(shí)現(xiàn)了PrintStudentDetails()方法的類型作為參數(shù)調(diào)用該函數(shù),比如Student類型,它會(huì)顯示該學(xué)生的詳細(xì)信息。這就是多態(tài)的實(shí)現(xiàn)。rKL28資訊網(wǎng)——每日最新資訊28at.com

完整的面向?qū)ο缶幊淘贕o中的示例:rKL28資訊網(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.www897cc.com/showinfo-26-57876-0.htmlGo語言中的面向?qū)ο缶幊?OOP)

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

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

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

標(biāo)簽:
  • 熱門焦點(diǎn)
  • K60至尊版狂暴引擎2.0加持:超177萬跑分?jǐn)孬@性能第一

    Redmi的后性能時(shí)代戰(zhàn)略發(fā)布會(huì)今天下午如期舉辦,在本次發(fā)布會(huì)上,Redmi公布了多項(xiàng)關(guān)于和聯(lián)發(fā)科的深度合作,以及新機(jī)K60 Ultra在軟件和硬件方面的特性,例如:“K60 至尊版,雙芯旗艦
  • 消息稱迪士尼要拍真人版《魔發(fā)奇緣》:女主可能也找黑人演員

    8月5日消息,迪士尼確實(shí)有點(diǎn)忙,忙著將不少動(dòng)畫改成真人版,繼《美人魚》后,真人版《白雪公主》、《魔發(fā)奇緣》也在路上了。據(jù)外媒消息稱,迪士尼將打造真人版
  • Golang 中的 io 包詳解:組合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是對(duì)Reader和Writer接口的組合,
  • 企業(yè)采用CRM系統(tǒng)的11個(gè)好處

    客戶關(guān)系管理(CRM)軟件可以為企業(yè)提供很多的好處,從客戶保留到提高生產(chǎn)力。  CRM軟件用于企業(yè)收集客戶互動(dòng),以改善客戶體驗(yàn)和滿意度。  CRM軟件市場(chǎng)規(guī)模如今超過580
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數(shù)據(jù)的地方,是數(shù)據(jù)源的一種,比如大家經(jīng)常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數(shù)據(jù),它既可以保
  • 2023年,我眼中的字節(jié)跳動(dòng)

    此時(shí)此刻(2023年7月),字節(jié)跳動(dòng)從未上市,也從未公布過任何官方的上市計(jì)劃;但是這并不妨礙它成為中國(guó)最受關(guān)注的互聯(lián)網(wǎng)公司之一。從2016-17年的抖音強(qiáng)勢(shì)崛起,到2018年的“頭騰
  • 2天漲粉255萬,又一賽道在抖音爆火

    來源:運(yùn)營(yíng)研究社作者 | 張知白編輯 | 楊佩汶設(shè)計(jì) | 晏談夢(mèng)潔這個(gè)暑期,旅游賽道徹底火了:有的「地方」火了——貴州村超旅游收入 1 個(gè)月超過 12 億;有的「博主」火了&m
  • 騰訊VS網(wǎng)易,最卷游戲暑期檔,誰能笑到最后?

    作者:無銹缽來源:財(cái)經(jīng)無忌7月16日晚,上海1862時(shí)尚藝術(shù)中心。伴隨著幻象的精準(zhǔn)命中,碩大的熒幕之上,比分被定格在了14:12,被寄予厚望的EDG戰(zhàn)隊(duì)以絕對(duì)的優(yōu)勢(shì)戰(zhàn)勝了BLG戰(zhàn)隊(duì),拿下了總決
  • 四年持續(xù)更迭堅(jiān)持探索行業(yè)無人之境,HarmonyOS 4帶來五大升級(jí)多項(xiàng)創(chuàng)新

    除了華為每年新發(fā)布的旗艦手機(jī)系列,上億花粉更加期待鴻蒙系統(tǒng)每次的跨版本大更新。8月4日,HarmonyOS 4于HDC 2023正式發(fā)布,這也是該系統(tǒng)歷經(jīng)四年的再
Top 主站蜘蛛池模板: 东台市| 任丘市| 怀柔区| 松阳县| 克什克腾旗| 九龙坡区| 汉沽区| 伊宁市| 库尔勒市| 屏南县| 本溪| 永安市| 西和县| 牡丹江市| 库尔勒市| 长子县| 滕州市| 泾川县| 瑞安市| 寻甸| 游戏| 云霄县| 新安县| 石景山区| 永寿县| 广灵县| 葵青区| 三台县| 盐城市| 英吉沙县| 邵阳市| 兴宁市| 灵璧县| 蚌埠市| 溧阳市| 枝江市| 阳泉市| 信阳市| 温泉县| 图片| 磴口县|