Golang 入門系列(五)GO語言中的面向對象

前面講了不少Go 語言的基礎知識,包括go環境的安裝,go語言的語法等,感興趣的朋友能夠先看看以前的文章。https://www.cnblogs.com/zhangweizhong/category/1275863.htmlhtml

今天GO語言中的面向對象。java

 

GO語言中的面向對象編程

 

其實GO並非一個純面向對象編程語言。它沒有提供類(class)這個關鍵字,只提供告終構體(struct)類型。編程語言

java或者C# 裏面,結構體(struct)是不能有成員函數的。然而,Go語言中的結構體(struct)能夠有"成員函數"。方法能夠被添加到結構體中,相似於一個類的實現。函數

我我的以爲Go 語言在的面向對象,其實更簡單,也更容易理解。spa

 

學過java或C# 的人應該都知道,面向對象的三個基本特徵:封裝、繼承和多態。他們的定義我這裏就不細說了。下面,就直接看看 go 語言下的面向對象是怎樣實現的吧。code

 

1. 封裝特性

  Golang區分公有屬性和私有屬性的機制就是方法或屬性是否首字母大寫,若是首字母大寫的方法就是公有的,若是首字母小寫的話就是私有的。htm

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{"zhangsan"} p.setName("lisi") p.GetInfo() }

 

2. 繼承特性

  GO語言的繼承方式採用的是匿名組合的方式:Woman 結構體中包含匿名字段Person,那麼Person中的屬性也就屬於Woman對象。對象

package main

import "fmt" type Person struct { name string } type Woman struct { Person sex string } func main() { woman := Woman{Person{"wangwu"}, "女"} fmt.Println(woman.name) fmt.Println(woman.sex) }

   

3. 多態特性

package main

import "fmt" type Eater interface { Eat() } type Man struct { } type Woman struct { } func (man *Man) Eat() { fmt.Println("Man Eat") } func (woman *Woman) Eat() { fmt.Println("Woman Eat") } func main() { var e Eater woman := Woman{} man := Man{} e = &woman e.Eat() e = &man e.Eat() }

 

最後blog

以上,就把Go語言如何實現面向對象的簡單介紹了一下,其實跟java和C# 等也都差很少,你們能夠比較着來看。總結的來講就是:Go沒有類,而是鬆耦合的類型、方法對接口的實現。

相關文章
相關標籤/搜索