欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語(yǔ)言使用組合的思想實(shí)現(xiàn)繼承

 更新時(shí)間:2022年12月16日 09:30:55   作者:陳明勇  
這篇文章主要為大家詳細(xì)介紹了在 Go 里面如何使用組合的思想實(shí)現(xiàn)“繼承”,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語(yǔ)言有一定的幫助,需要的可以了解一下

前言

  • Go 語(yǔ)言的設(shè)計(jì)之初,就不打算支持面向?qū)ο蟮木幊烫匦?,因?Go 不支持面向?qū)ο蟮娜筇匦灾?mdash;—繼承。但是 Go 可以通過(guò)組合的思想去實(shí)現(xiàn) “繼承”。
  • 繼承是面向?qū)ο蟮娜筇匦灾?,繼承是從已有的類中派生出新的類,新的類能吸收已有類的數(shù)據(jù)屬性和行為,并能擴(kuò)展新的能力。
  • Go 語(yǔ)言里的“繼承”體現(xiàn)如一個(gè)結(jié)構(gòu)體擁有另一個(gè)結(jié)構(gòu)體的的所有字段和方法,并在此基礎(chǔ)上,定義新的字段和方法。

類型嵌入

組合的思想,在 Go 語(yǔ)言里的體現(xiàn)就是類型嵌入。類型嵌入,指的是一個(gè)類型的定義里嵌入了其他類型。類型嵌入包含兩種,一種是結(jié)構(gòu)體類型嵌入,另一種是接口類型嵌入。

結(jié)構(gòu)體類型嵌入

import "fmt"

type Person struct {
    Name string
    Age  int
}

func (p Person) Introduce() {
    fmt.Printf("大家好,我叫%s,我今年%d歲了。\n", p.Name, p.Age)
}

type Student struct {
    Person
    School string
}

func (s Student) GoToTheClass() {
    fmt.Println("去上課...")
}

func main() {
    student := Student{}
    student.Name = "小明"
    student.Age = 18
    student.School = "太陽(yáng)系大學(xué)"

    // 執(zhí)行 Person 類型的 Introduce 方法
    student.Introduce()
    // 執(zhí)行自身的 GoToTheClass 方法
    student.GoToTheClass()
}

執(zhí)行結(jié)果:

大家好,我叫小明,我今年18歲了。
去上課...

  • 定義 Person 結(jié)構(gòu)體,包含 NameAge 字段以及 Introduce 方法。
  • 定義 Student 結(jié)構(gòu)體,定義 School 字段,GoToTheClass 方法,嵌入 Person 類型,直接以結(jié)構(gòu)體類型作為結(jié)構(gòu)體的字段,稱為 結(jié)構(gòu)體的類型嵌入,此字段也被視為 字段嵌入。
  • 創(chuàng)建 Student 變量 student,通過(guò) student 訪問 NameAge 字段以及 Introduce 方法,明明 Student 沒有定義這兩個(gè)字段和這個(gè)方法,為什么能訪問和使用呢?這是因?yàn)?Student “繼承” 了 PersonPerson 結(jié)構(gòu)體的字段和方法,在 Student 結(jié)構(gòu)體里隱式實(shí)現(xiàn)。

接口類型嵌入

type Coder interface {
    Code()
}

type Tester interface {
    Test()
}

type TesterCoder interface {
    Tester
    Coder
}
  • 定義 Coder 接口,接口有 Code 編碼方法。
  • 定義 Tester 接口,接口有 Test 測(cè)試方法。
  • 定義 TesterCoder 接口,內(nèi)嵌 CoderTester 接口類型,通過(guò)組合,讓 TesterCoder 接口擁有 Code 編碼方法和 Test 測(cè)試方法。看到這里,有的小伙伴可能會(huì)想到開發(fā)崗、測(cè)試崗測(cè)試開發(fā)崗。
  • Go 標(biāo)準(zhǔn)庫(kù)中可以看到很多這種組合方式的應(yīng)用。

小結(jié)

本文介紹了 Go 語(yǔ)言中的 “繼承”,它是通過(guò)組合的思想去模擬實(shí)現(xiàn)面向?qū)ο笾械睦^承。然后介紹了什么是類型嵌入以及類型嵌入的兩種類型,嵌入的類型包含的字段和方法以隱式存在。

“繼承”的實(shí)現(xiàn),能夠提高代碼的復(fù)用性,代碼的維護(hù)性和擴(kuò)展性也得以提高。

到此這篇關(guān)于Go語(yǔ)言使用組合的思想實(shí)現(xiàn)繼承的文章就介紹到這了,更多相關(guān)Go語(yǔ)言繼承內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • go?doudou開發(fā)單體RESTful服務(wù)快速上手教程

    go?doudou開發(fā)單體RESTful服務(wù)快速上手教程

    這篇文章主要為大家介紹了go?doudou開發(fā)單體RESTful服務(wù)快速上手教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Go1.21新增slices包中函數(shù)的用法詳解

    Go1.21新增slices包中函數(shù)的用法詳解

    Go?1.21新增的?slices?包提供了很多和切片相關(guān)的函數(shù),可以用于任何類型的切片,本文為大家整理了部分函數(shù)的具體用法,感興趣的小伙伴可以了解一下
    2023-08-08
  • Go語(yǔ)言中的包Package詳解

    Go語(yǔ)言中的包Package詳解

    本文詳細(xì)講解了Go語(yǔ)言中的包Package,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • golang 常用定時(shí)任務(wù)匯總

    golang 常用定時(shí)任務(wù)匯總

    這篇文章主要介紹了golang 常用定時(shí)任務(wù)匯總,golang利用goroutine外加github.com/gorhill/cronexpr庫(kù)就可實(shí)現(xiàn)定時(shí)任務(wù),具體代碼介紹,需要的小伙伴可以參考一下
    2022-09-09
  • Go語(yǔ)言實(shí)現(xiàn)運(yùn)算符重載的方法詳解

    Go語(yǔ)言實(shí)現(xiàn)運(yùn)算符重載的方法詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Go語(yǔ)言實(shí)現(xiàn)運(yùn)算符重載的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-09-09
  • 詳解Go語(yǔ)言如何判斷兩個(gè)對(duì)象是否相等

    詳解Go語(yǔ)言如何判斷兩個(gè)對(duì)象是否相等

    在編程中,判斷兩個(gè)對(duì)象是否相等是一項(xiàng)常見的任務(wù),同時(shí)判斷對(duì)象是否相等在很多情況下都非常重要,所以在接下來(lái)的內(nèi)容中,我們將詳細(xì)介紹在?Go?語(yǔ)言中如何判斷對(duì)象是否相等的方法和技巧,需要的可以參考一下
    2023-06-06
  • go實(shí)現(xiàn)一個(gè)分布式限流器的方法步驟

    go實(shí)現(xiàn)一個(gè)分布式限流器的方法步驟

    項(xiàng)目中需要對(duì)api的接口進(jìn)行限流,本文主要介紹了go實(shí)現(xiàn)一個(gè)分布式限流器的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 詳解Go語(yǔ)言中獲取文件路徑的不同方法與應(yīng)用場(chǎng)景

    詳解Go語(yǔ)言中獲取文件路徑的不同方法與應(yīng)用場(chǎng)景

    在使用?Go?開發(fā)項(xiàng)目時(shí),估計(jì)有不少人遇到過(guò)無(wú)法正確處理文件路徑的問題,本文將嘗試從簡(jiǎn)單到復(fù)雜,詳細(xì)介紹?Go?中獲取路徑的不同方法及應(yīng)用場(chǎng)景,希望對(duì)大家有所幫助
    2024-02-02
  • Go channel發(fā)送方和接收方如何相互阻塞等待源碼解讀

    Go channel發(fā)送方和接收方如何相互阻塞等待源碼解讀

    這篇文章主要為大家介紹了Go channel發(fā)送方和接收方如何相互阻塞等待源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Go語(yǔ)言集成mysql驅(qū)動(dòng)、調(diào)用數(shù)據(jù)庫(kù)、查詢數(shù)據(jù)操作示例

    Go語(yǔ)言集成mysql驅(qū)動(dòng)、調(diào)用數(shù)據(jù)庫(kù)、查詢數(shù)據(jù)操作示例

    這篇文章主要介紹了Go語(yǔ)言集成mysql驅(qū)動(dòng)、調(diào)用數(shù)據(jù)庫(kù)、查詢數(shù)據(jù)操作,結(jié)合實(shí)例形式分析了Go語(yǔ)言安裝mysql驅(qū)動(dòng)包、連接mysql數(shù)據(jù)庫(kù)及查詢等相關(guān)操作技巧,需要的朋友可以參考下
    2019-06-06

最新評(píng)論