Golang 基礎之物件導向

帽兒山的槍手發表於2022-06-06

大家好,今天將梳理出的 Go語言物件導向內容,分享給大家。 請多多指教,謝謝。

封裝、繼承、多型是物件導向的3個基本特徵,本文主要介紹Go語言是如何實現這些特徵的。

Golang實現物件導向的兩個關鍵型別是 structinterface,前面Golang 基礎之基礎語法梳理 (二)Golang 基礎之基礎語法梳理 (三) 文章已將詳細介紹了用法和案例。

本章節內容

  • 封裝
  • 繼承
  • 多型

幾點說明

  1. Go支援物件導向(OOP),並不是純粹的面嚮物件語言;
  2. Go沒有類的概念,結構體(struct)相當於其它程式語言的類(class);
  3. Go物件導向程式設計非常簡潔,通過介面(interface)關聯,耦合性低,也非常靈活;

本節內容,我將這三層概念簡化成通俗易懂的文字,帶大家認識。 相信幾分鐘後,大家會對物件導向有一個深刻的印象,為以後的開發,有所幫助。

封裝

封裝就是把抽象出來的欄位和操作方法封裝在一起,資料被保護在內部,只有通過操作方法,才能對欄位進行操作。

package main

import "fmt"

type Person struct { // 抽象出來的欄位
    name string
}

func (person *Person) setName(name string) { // 封裝方法
    person.name = name
}

func (person *Person) GetInfo() { // 封裝方法
    fmt.Println(person.name)
}

func main() {
    p := Person{"帽兒山的槍手"}
    p.setName("新名字")
    p.GetInfo() // 輸出 新名字
}

繼承

繼承顧名思義,可以解決程式碼複用。在Go中,只需要在結構體中巢狀一個匿名結構體。

Go沒有顯式的繼承,而是通過組合實現繼承。
package main

import "fmt"

type Person struct { // 抽象出的欄位
    name string
}

func (p *Person) getName() { // 封裝方法
    fmt.Println(p.name)
}

type Inherit struct { // 繼承
    Person
}

func main() {
    i := Inherit{Person{"帽兒山的槍手"}}
    i.getName() // 輸出 帽兒山的槍手
}

多型

把它們共同的方法提煉出來定義一個抽象的介面,就是多型。

package main

import "fmt"

type Birds interface { // 將共同的方法提煉出來
    fly()
}

type Dove struct {
}

type Eagle struct {
}

func (d *Dove) fly() { // 封裝方法
    fmt.Println("鴿子在飛")
}

func (e *Eagle) fly() { // 封裝方法
    fmt.Println("鷹在飛")
}

func main() {
    var b Birds // 多型的抽象介面

    dove := Dove{}
    eagle := Eagle{}

    b = &dove
    b.fly() // 鴿子在飛

    b = &eagle
    b.fly() // 鷹在飛
}

技術文章持續更新,請大家多多關注呀~~

搜尋微信公眾號【 帽兒山的槍手 】,關注我

相關文章