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

當前位置:首頁 > 科技  > 軟件

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

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

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

封裝(Encapsulation)

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

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

type Student struct{  name string  rollNo uint64}

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

抽象(Abstraction)

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

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

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

type iStudent interface{  calcPercentage() float64}

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

繼承(Inheritance)

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

例如,考慮以下結(jié)構(gòu)體:I8Q28資訊網(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。I8Q28資訊網(wǎng)——每日最新資訊28at.com

多態(tài)(Polymorphism)

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

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

例如,考慮以下代碼:I8Q28資訊網(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)。I8Q28資訊網(wǎng)——每日最新資訊28at.com

完整的面向?qū)ο缶幊淘贕o中的示例:I8Q28資訊網(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)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

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

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

標簽:
  • 熱門焦點
  • K60至尊版剛預(yù)熱 一加Ace2 Pro正面硬剛

    Redmi這邊剛?cè)缁鹑巛钡男麄髁薑60 Ultra的各種技術(shù)和硬件配置,作為競品的一加也坐不住了。一加中國區(qū)總裁李杰發(fā)布了兩條微博,表示在自家的一加Ace2上早就已經(jīng)采用了和PixelWo
  • 十個簡單但很有用的Python裝飾器

    裝飾器(Decorators)是Python中一種強大而靈活的功能,用于修改或增強函數(shù)或類的行為。裝飾器本質(zhì)上是一個函數(shù),它接受另一個函數(shù)或類作為參數(shù),并返回一個新的函數(shù)或類。它們通常用
  • ESG的面子與里子

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之三伏大幕拉起,各地高溫預(yù)警不絕,但處于厄爾尼諾大“烤”之下的除了眾生,還有各大企業(yè)發(fā)布的ESG報告。ESG是“環(huán)境保
  • 三星顯示已開始為AR設(shè)備研發(fā)硅基LED微顯示屏

    7月18日消息,據(jù)外媒報道,隨著蘋果首款頭顯產(chǎn)品Vision Pro在6月份正式推出,AR/VR/MR等頭顯產(chǎn)品也就將成為各大公司下一個重要的競爭領(lǐng)域,對顯示屏這一關(guān)
  • 回歸OPPO兩年,一加贏了銷量,輸了品牌

    成為OPPO旗下主打性能的先鋒品牌后,一加屢創(chuàng)佳績。今年618期間,一加手機全渠道銷量同比增長362%,憑借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
  • OPPO K11搭載長壽版100W超級閃充:26分鐘充滿100%

    據(jù)此前官方宣布,OPPO將于7月25日也就是今天下午14:30舉辦新品發(fā)布會,屆時全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競品相比,其最大的賣
  • 英特爾Xe-HP項目終止,將專注Xe-HPC/HPG系列顯卡

    據(jù)10 月 31 日消息報道,英特爾高級副總裁兼加速計算系統(tǒng)和圖形事業(yè)部總經(jīng)理 表示,Xe-HP“ Arctic Sound” 系列服務(wù)器 GPU 已經(jīng)應(yīng)用于 oneAPI devcloud 云服
  • “買真退假” 這種“羊毛”不能薅

    □ 法治日報 記者 王春   □ 本報通訊員 胡佳麗  2020年初,還在上大學(xué)的小東加入了一個大學(xué)生兼職QQ群。群主“七王”在群里介紹一些刷單賺
  • 外交部:美方應(yīng)停止在網(wǎng)絡(luò)安全問題上不負責(zé)任地指責(zé)他國

      中國外交部今天(16日)舉行例行記者會。會上,有記者問,美國情報官員稱,他們正在阻攔來自中國以及其他國家的黑客獲取相關(guān)科研成果。 中方對此有何評論?對此
Top 主站蜘蛛池模板: 德阳市| 鸡东县| 白水县| 玛纳斯县| 西平县| 遂川县| 田林县| 乡城县| 奉节县| 保德县| 板桥市| 南充市| 龙里县| 隆尧县| 五峰| 阳高县| 陆丰市| 大荔县| 仲巴县| 永丰县| 定远县| 景德镇市| 深水埗区| 法库县| 黄山市| 汉沽区| 崇文区| 莲花县| 宜宾市| 盐城市| 荆门市| 婺源县| 黑山县| 桃源县| 石首市| 大安市| 水城县| 视频| 临湘市| 牟定县| 南平市|