成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Golang 語言是面向對象編程風格的編程語言嗎?

開發 后端
本文我們介紹了 Golang 語言是否是面向對象編程風格的語言,并給出了 Golang 語言官方的回答和解釋。然后使用示例代碼介紹了 Golang 語言的面向對象編程風格。

[[402080]]

01介紹

Golang 語言是面向對象語言嗎?Golang 語言官方的回答是 Yes and no。什么意思呢?Golang 語言是面向對象語言,Golang 語言也不是面向對象語言。

雖然 Golang 語言有類(struct)和方法(method),支持面向對象的編程風格,我們可以使用 Golang 語言的 struct 實現面向對象的封裝特性,但是 Golang 語言沒有面向對象的繼承特性,Golang 語言可以使用組合實現“繼承”。

Golang 語言中的 interface 也和其他語言中的接口實現方式不同,Golang 語言中的接口實現方式是鴨子類型(duck type)。

封裝,繼承和多態是區分編程語言是否是面向對象編程語言的三個重要特性。本文我們通過一些簡單易懂的示例代碼介紹一下 Golang 語言的面向對象編程風格。

02封裝

面向對象的封裝特性,其他面向對象語言是使用 class 定義一個類,然后在類中定義屬性和方法。在 Golang 語言中,沒有類 class 的概念,它是使用結構體 struct 替代類 class,struct 中可以包含零個或多個變量,然后可以使用 method 和 struct 綁定實現方法,用來替代其他語言中 class 中的屬性和方法。

關于 method 綁定的 struct(接收者)是值類型和指針類型之間的區別,我們在之前的文章中介紹過,在此不再贅述。

  1. type Employee struct { 
  2.  Name string 
  3.  Gender string 
  4.  Age uint8 
  5.  Salary uint 
  6.  
  7. func (e Employee) Information () string { 
  8.  return fmt.Sprintf("Name:%s Gender:%s Age:%d Salary:%d", e.Name, e.Gender, e.Age, e.Salary) 

閱讀上面這段代碼,我們定義了一個命名是 Employee 的 struct,包含 4 個成員變量,并且定義一個 Information 方法,綁定到命名是 Employee 的 struct 上。

03繼承 組合

面向對象的繼承特性,在 Golang 語言中并不支持,但是可以使用組合的方式實現“繼承”。

  1. type User struct { 
  2.  ID uint64 
  3.  Name string 
  4.  Score uint64 
  5.  
  6. type Member struct { 
  7.  User 
  8.  Level uint8 
  9.  
  10. func (u User) Information () string { 
  11.  return fmt.Sprintf("ID:%d Name:%s Score:%d", u.ID, u.Name, u.Score) 

閱讀上面這段代碼,我們定義了一個命名為 User 的 struct,它包含 3 個成員變量,然后定一個一個命名為 Member 的 struct,它包含 2 個成員變量,其中一個成員變量是嵌入的 User,通過組合的方式,類型 Member 就“繼承”了類型 User 的屬性(成員變量)和方法。

04多態

Golang 語言中也有接口 interface,它的 interface 的實現方式是 duck type,它不需要像其他面向對象編程語言那樣,使用關鍵字 implements 顯式聲明,而是只需要類型通過實現接口中的所有方法來實現接口。

  1. type MemberRights interface { 
  2.  Information () string 
  3.  
  4. type BronzeMember struct { 
  5.  Discount uint8 
  6.  
  7. type SilverMember struct { 
  8.  Discount uint8 
  9.  
  10. type GoldMember struct { 
  11.  Discount uint8 
  12.  
  13. func (b *BronzeMember) Information () string { 
  14.  return fmt.Sprintf("Discount:%d", b.Discount) 
  15.  
  16. func (s *SilverMember) Information () string { 
  17.  return fmt.Sprintf("Discount:%d", s.Discount) 
  18.  
  19. func (g *GoldMember) Information () string { 
  20.  return fmt.Sprintf("Discount:%d", g.Discount) 
  21.  
  22. func Price (m MemberRights) { 
  23.  fmt.Println(m.Information()) 
  24.  
  25. func main () { 
  26.  b := &BronzeMember{Discount: 9} 
  27.  Price(b) 
  28.  s := &SilverMember{8} 
  29.  Price(s) 
  30.  g := new(GoldMember) 
  31.  g.Discount = 7 
  32.  Price(g) 

閱讀上面這段代碼,我們定義一個命名為 MemberRights 的接口,包含一個方法 Information () string,然后定義了三個 struct,命名分別是 BronzeMember,SilverMember 和 GoldMember,并且實現了 Information () string 方法。

我們還定義了一個函數 Price,接收一個 MemberRights 接口類型的參數。我們在 main 函數中調用 Price 函數,并分別傳入我們定義的三個實現了 MemberRights 接口包含的方法 Information () string 的變量作為 Price 函數的參數。因為 Price 函數的參數是接口類型,所以我們需要傳入指針類型的變量,我們還特意通過三種不同的方式聲明指針類型的變量。

05總結

本文我們介紹了 Golang 語言是否是面向對象編程風格的語言,并給出了 Golang 語言官方的回答和解釋。然后使用示例代碼介紹了 Golang 語言的面向對象編程風格。

 

需要注意的是 Golang 語言中使用命名首字母大小寫區分私有和公有,私有和公有屬性在 Golang 語言中也叫可導出和非可導出。

本文轉載自微信公眾號「Golang語言開發?!梗梢酝ㄟ^以下二維碼關注。轉載本文請聯系Golang語言開發棧公眾號。

 

責任編輯:武曉燕 來源: Golang語言開發棧
相關推薦

2024-04-02 07:32:58

Go語言接口

2024-01-08 07:02:48

數據設計模式

2022-03-02 09:49:14

Rust編程語言

2009-04-22 09:20:26

Erlang并發函數式

2010-11-17 11:31:22

Scala基礎面向對象Scala

2020-07-24 09:40:04

C語言OOP代碼

2021-11-08 07:48:48

Go語言對象

2012-01-17 09:34:52

JavaScript

2017-04-21 09:07:39

JavaScript對象編程

2019-07-17 13:45:42

網絡安全防火墻軟件

2010-03-01 17:47:53

Python語言

2010-08-24 16:07:37

C語言

2021-11-28 23:06:30

語言編程接口

2011-06-20 08:48:17

編程語言

2013-01-10 10:05:29

編程面向對象編程

2015-10-19 09:23:44

新編編程女人

2013-02-18 09:20:10

2010-03-19 09:39:17

Python編程語言

2012-09-28 13:23:43

編程語言語言進化程序員

2019-05-15 11:38:22

GoogleGo編程語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一区免费 | 免费一级欧美在线观看视频 | 久久精品一区二区三区四区 | 九九亚洲| 欧美国产日韩在线 | 午夜亚洲 | 中文字幕在线二区 | 欧美日韩一区二区三区视频 | 日日射影院 | 日本三级在线网站 | 欧美日本亚洲 | 精品一区二区在线观看 | 日韩在线免费 | 黄色免费av | 久久不卡 | 黄网站涩免费蜜桃网站 | 亚洲高清中文字幕 | 亚洲一区二区久久 | 人人干视频在线 | 久久久久久www | 在线观看不卡av | 欧美一区二区三区视频 | 刘亦菲国产毛片bd | 欧洲一区二区三区 | 中文二区 | 精品免费国产一区二区三区四区 | 精品视频一区二区 | 国产精品免费视频一区 | 91资源在线观看 | 欧美成人a∨高清免费观看 老司机午夜性大片 | 免费观看成人性生生活片 | 国产精品日韩欧美一区二区 | 欧美精品一二三 | a在线v| 日韩成人免费视频 | 天堂av在线影院 | 成人免费观看视频 | 久草日韩 | 在线精品一区二区 | 欧美日韩成人在线 | 亚洲不卡一 |