最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

類型嵌入

組合的思想,在 Go 語言里的體現(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 = "太陽系大學(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,通過 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 接口類型,通過組合,讓 TesterCoder 接口擁有 Code 編碼方法和 Test 測(cè)試方法。看到這里,有的小伙伴可能會(huì)想到開發(fā)崗、測(cè)試崗測(cè)試開發(fā)崗。
  • Go 標(biāo)準(zhǔn)庫中可以看到很多這種組合方式的應(yīng)用。

小結(jié)

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

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

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

相關(guān)文章

  • 手把手教你vscode配置golang開發(fā)環(huán)境的步驟

    手把手教你vscode配置golang開發(fā)環(huán)境的步驟

    這篇文章主要介紹了手把手教你vscode配置golang開發(fā)環(huán)境的步驟,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Golang中panic與recover的區(qū)別

    Golang中panic與recover的區(qū)別

    這篇文章主要介紹了Golang中panic與recover的區(qū)別,文章基于Golang的基礎(chǔ)內(nèi)容展開panic與recover的區(qū)別介紹,需要的小伙伴可以參考一下
    2022-06-06
  • 如何有效控制Go線程數(shù)實(shí)例探究

    如何有效控制Go線程數(shù)實(shí)例探究

    這篇文章主要為大家介紹了如何有效控制?Go?線程數(shù)的問題探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Golang并發(fā)利器sync.Once的用法詳解

    Golang并發(fā)利器sync.Once的用法詳解

    在某些場(chǎng)景下,我們需要初始化一些資源。有時(shí)會(huì)采用延遲初始化的方式,在真正需要資源的時(shí)候才進(jìn)行初始化。在這種情況下,Go語言中的sync.Once提供一個(gè)優(yōu)雅且并發(fā)安全的解決方案,本文將對(duì)其進(jìn)行詳細(xì)介紹
    2023-04-04
  • Go項(xiàng)目在linux服務(wù)器的部署詳細(xì)步驟

    Go項(xiàng)目在linux服務(wù)器的部署詳細(xì)步驟

    在今天的軟件開發(fā)中,使用Linux作為操作系統(tǒng)的比例越來越高,而Golang語言則因?yàn)槠涓咝?、?jiǎn)潔和并發(fā)性能等特點(diǎn),也被越來越多的開發(fā)者所青睞,這篇文章主要給大家介紹了關(guān)于Go項(xiàng)目在linux服務(wù)器的部署詳細(xì)步驟,需要的朋友可以參考下
    2023-09-09
  • Go操作etcd的實(shí)現(xiàn)示例

    Go操作etcd的實(shí)現(xiàn)示例

    etcd是近幾年比較火熱的一個(gè)開源的、分布式的鍵值對(duì)數(shù)據(jù)存儲(chǔ)系統(tǒng),提供共享配置、服務(wù)的注冊(cè)和發(fā)現(xiàn),本文主要介紹etcd的安裝和使用,感興趣的可以了解一下
    2021-09-09
  • 使用Go語言解決Scan空格結(jié)束輸入問題

    使用Go語言解決Scan空格結(jié)束輸入問題

    這篇文章主要為大家介紹了使用Go語言來解決Scan空格結(jié)束輸入問題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • 使用Gorm操作Oracle數(shù)據(jù)庫踩坑記錄

    使用Gorm操作Oracle數(shù)據(jù)庫踩坑記錄

    gorm是目前用得最多的go語言orm庫,本文主要介紹了使用Gorm操作Oracle數(shù)據(jù)庫踩坑記錄,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 利用dep代替go get獲取私有庫的方法教程

    利用dep代替go get獲取私有庫的方法教程

    go get 從指定源上面下載或者更新指定的代碼和依賴,并對(duì)他們進(jìn)行編譯和安裝,但go get功能比較差,所以下面這篇文章主要給大家介紹了關(guān)于利用dep代替go get獲取私有庫的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-11-11
  • Go語言面試題之select和channel的用法

    Go語言面試題之select和channel的用法

    金九銀十面試季到了(PS:貌似今年一年都是面試季),就業(yè)環(huán)境很差,導(dǎo)致從業(yè)人員不得不卷。本文將重點(diǎn)講解一下Go面試進(jìn)階知識(shí)點(diǎn)之select和channel,需要的可以參考一下
    2022-09-09

最新評(píng)論

澄城县| 邳州市| 大关县| 绥江县| 进贤县| 明水县| 且末县| 饶阳县| 七台河市| 南宫市| 秀山| 小金县| 汉中市| 巴东县| 闸北区| 定襄县| 扶风县| 若羌县| 安宁市| 大化| 七台河市| 宽城| 顺昌县| 莆田市| 万源市| 突泉县| 兰溪市| 汉阴县| 黄陵县| 垫江县| 庄浪县| 岳阳县| 时尚| 梓潼县| 巨鹿县| 中山市| 东乡县| 盐源县| 化州市| 文水县| 开化县|