JSer开始尝试Golang 〜 学习面向对象的编写方式

上次我们已经能够使用Docker来运行Golang。

这次先搁置WebApp,在学习Golang中的面向对象编程。看示例代码的时候经常会想:“这是什么鬼!?”(‘A`)

班级 jí)

首先是从类开始。虽然说没有Golang中的类。Golang中有的是在C语言等中熟悉的结构体。

type Person struct {
    name string
    age int
}

在Golang中,可以通过在这个结构体中定义方法来模仿类的使用。

type Person struct {
    name string
    age int
}

// Person構造体にSayHelloメソッドを追加
func (p *Person) SayHello() {
    fmt.Println("[" + p.name + "]< こんにちは!")
}

func main() {
    taro := &Person{"たろう", 20}
    taro.SayHello() // [たろう]< こんにちは!
}

※ 这里将(p *Person)部分改为(p Person)也能正常运行。这是值传递与引用传递的区别。不再赘述解释。

这很像ES5时代使用原型进行方法定义的方式。

继承是一个类的概念。

由于Golang没有类,因此当然也没有继承功能。
为了实现类似继承的功能,可以使用上述的嵌套结构体。

type Monster struct {
    name string
}

func (m *Monster) Attack() {
    fmt.Println(m.name + "の こうげき")
}

// Monsterを継承したSlimeを定義
type Slime struct {
    Monster
}

func (s *Slime) Call() {
    fmt.Println(s.name + "は なかまをよんだ")
}

// Slimeを継承したHealSlimeを定義
type HealSlime struct {
    Slime
}

func (h *HealSlime) Heal() {
    fmt.Println(h.name + "は たいりょくをかいふくした")
}

func main() {
    h := HealSlime{Slime{Monster{"ホイミン"}}}
    h.Attack() // ホイミンの こうげき
    h.Call()   // ホイミンは なかまをよんだ
    h.Heal()   // ホイミンは たいりょくをかいふくした
}

你能正确地调用父类的方法啊。

封装

在Golang中,公開範圍是由名稱的首字母是大寫還是小寫來決定的。如果是大寫,則為public;如果是小寫,則為private。

type Person struct {
    Name string
    age int // 年齢は非公開
}

// GetAgeメソッドは公開
func (p *Person) GetAge() int {
    return age - 5
}

// getRealAgeメソッドは非公開
func (p *Person) getRealAge() int {
    return age
}

结束

下一次,我打算开始开发WebApp。

继续

广告
将在 10 秒后关闭
bannerAds