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。
继续