日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Golang 語言是面向?qū)ο缶幊田L(fēng)格的編程語言嗎?

01介紹

Golang 語言是面向?qū)ο笳Z言嗎?Golang 語言官方的回答是 Yes and no。什么意思呢?Golang 語言是面向?qū)ο笳Z言,Golang 語言也不是面向?qū)ο笳Z言。

創(chuàng)新互聯(lián)公司是一家專業(yè)提供寧武企業(yè)網(wǎng)站建設(shè),專注與做網(wǎng)站、成都網(wǎng)站建設(shè)、H5建站、小程序制作等業(yè)務(wù)。10年已為寧武眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。

雖然 Golang 語言有類(struct)和方法(method),支持面向?qū)ο蟮木幊田L(fēng)格,我們可以使用 Golang 語言的 struct 實(shí)現(xiàn)面向?qū)ο蟮姆庋b特性,但是 Golang 語言沒有面向?qū)ο蟮睦^承特性,Golang 語言可以使用組合實(shí)現(xiàn)“繼承”。

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

封裝,繼承和多態(tài)是區(qū)分編程語言是否是面向?qū)ο缶幊陶Z言的三個(gè)重要特性。本文我們通過一些簡單易懂的示例代碼介紹一下 Golang 語言的面向?qū)ο缶幊田L(fēng)格。

02封裝

面向?qū)ο蟮姆庋b特性,其他面向?qū)ο笳Z言是使用 class 定義一個(gè)類,然后在類中定義屬性和方法。在 Golang 語言中,沒有類 class 的概念,它是使用結(jié)構(gòu)體 struct 替代類 class,struct 中可以包含零個(gè)或多個(gè)變量,然后可以使用 method 和 struct 綁定實(shí)現(xiàn)方法,用來替代其他語言中 class 中的屬性和方法。

關(guān)于 method 綁定的 struct(接收者)是值類型和指針類型之間的區(qū)別,我們?cè)谥暗奈恼轮薪榻B過,在此不再贅述。

 
 
 
 
  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) 

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

03繼承 組合

面向?qū)ο蟮睦^承特性,在 Golang 語言中并不支持,但是可以使用組合的方式實(shí)現(xiàn)“繼承”。

 
 
 
 
  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) 

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

04多態(tài)

Golang 語言中也有接口 interface,它的 interface 的實(shí)現(xiàn)方式是 duck type,它不需要像其他面向?qū)ο缶幊陶Z言那樣,使用關(guān)鍵字 implements 顯式聲明,而是只需要類型通過實(shí)現(xiàn)接口中的所有方法來實(shí)現(xiàn)接口。

 
 
 
 
  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) 

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

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

05總結(jié)

本文我們介紹了 Golang 語言是否是面向?qū)ο缶幊田L(fēng)格的語言,并給出了 Golang 語言官方的回答和解釋。然后使用示例代碼介紹了 Golang 語言的面向?qū)ο缶幊田L(fēng)格。

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

本文轉(zhuǎn)載自微信公眾號(hào)「Golang語言開發(fā)棧」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Golang語言開發(fā)棧公眾號(hào)。


新聞名稱:Golang 語言是面向?qū)ο缶幊田L(fēng)格的編程語言嗎?
文章鏈接:http://www.5511xx.com/article/cdiohde.html