欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang繼承模擬實(shí)例詳解

 更新時(shí)間:2016年07月27日 11:14:28   作者:軒脈刃  
這篇文章主要介紹了Golang繼承模擬方法,結(jié)合實(shí)例形式分析了Go語(yǔ)言實(shí)現(xiàn)繼承的原理與相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Golang繼承模擬實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:

問(wèn)題由一個(gè)需求引起:

web的controller,希望創(chuàng)建一個(gè)基類,然后在子類的controller中定義action方法,基類有一個(gè)run函數(shù)能根據(jù)字符串自動(dòng)找到子類的action方法。

如何解決呢? -- 用繼承

示例分析繼承

首先這個(gè)需求是很普遍的,由于腦中有繼承概念,所以想當(dāng)然地以為這個(gè)很容易實(shí)現(xiàn):

復(fù)制代碼 代碼如下:
package main
import(
    "reflect"
)
type A struct {
}
func (self A)Run() {
    c := reflect.ValueOf(self)
    method := c.MethodByName("Test")
    println(method.IsValid())
}
type B struct {
    A
}
func (self B)Test(s string){
    println("b")
}
func main() {
    b := new(B)
    b.Run()
}

B繼承A,B中調(diào)用Run方法,自然會(huì)調(diào)用到A的Run方法,然后我根據(jù)string“Test”,希望能找到B中(B是子類)的Test方法。

用繼承的觀點(diǎn)看沒(méi)錯(cuò),實(shí)際運(yùn)行呢?method.IsValid() 返回false。很明顯,這里的Test方法是找不到的。

分析問(wèn)題,首先這里“繼承”兩個(gè)詞就用錯(cuò)了,在go中不應(yīng)該提及“繼承”這個(gè)詞,我更選擇使用“嵌套”這個(gè)詞。B是嵌套了A,所以這里的b.Run()實(shí)際上是語(yǔ)法糖,調(diào)用的是b.A.Run()。這里Run的全部環(huán)境都在A中。所以是找不到A的Test的。

感謝@hongqirui和@海意,在它們幫忙下找到了解決方法:

復(fù)制代碼 代碼如下:
package main
import(
    "reflect"
)
type A struct {
    Parent interface{}
}
func (self A)Run() {
    c := reflect.ValueOf(self.Parent)
    method := c.MethodByName("Test")
    println(method.IsValid())
}
type B struct {
    A
}
func (self B)Test(s string){
    println("b")
}
func (self B)Run(){
    self.A.Run()
}
func main() {
    b := new(B)
    b.A.Parent = b
    b.Run()
}

在父類中加一個(gè)interface{}記錄子類!!這樣問(wèn)題就迎刃而解了!method.IsValid()返回了true。

結(jié)論

所以在golang中要模擬普通的繼承,除了使用嵌套之外,還需要在父類中“注冊(cè)”子類的信息!

希望本文所述對(duì)大家Go語(yǔ)言程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Go?io/fs.FileMode文件系統(tǒng)基本操作和權(quán)限管理深入理解

    Go?io/fs.FileMode文件系統(tǒng)基本操作和權(quán)限管理深入理解

    這篇文章主要為大家介紹了Go?io/fs.FileMode文件系統(tǒng)基本操作和權(quán)限管理深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • golang中cache組件的使用及groupcache源碼解析

    golang中cache組件的使用及groupcache源碼解析

    本篇主要解析groupcache源碼中的關(guān)鍵部分, lru的定義以及如何做到同一個(gè)key只加載一次。緩存填充以及加載抑制的實(shí)現(xiàn)方法,本文重點(diǎn)給大家介紹golang中cache組件的使用及groupcache源碼解析,感興趣的朋友一起看看吧
    2021-06-06
  • 使用自定義錯(cuò)誤碼攔截grpc內(nèi)部狀態(tài)碼問(wèn)題

    使用自定義錯(cuò)誤碼攔截grpc內(nèi)部狀態(tài)碼問(wèn)題

    這篇文章主要介紹了使用自定義錯(cuò)誤碼攔截grpc內(nèi)部狀態(tài)碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • go Gin安裝及初始化操作示例

    go Gin安裝及初始化操作示例

    這篇文章主要介紹了gin安裝及初始化,修改啟動(dòng)端口,get/post?請(qǐng)求參數(shù),模型綁定shouldbind,自定義驗(yàn)證器/表單驗(yàn)證,等操作步驟,有需要的朋友可以借鑒參考下
    2022-04-04
  • Golang編程實(shí)現(xiàn)刪除字符串中出現(xiàn)次數(shù)最少字符的方法

    Golang編程實(shí)現(xiàn)刪除字符串中出現(xiàn)次數(shù)最少字符的方法

    這篇文章主要介紹了Golang編程實(shí)現(xiàn)刪除字符串中出現(xiàn)次數(shù)最少字符的方法,涉及Go語(yǔ)言字符串遍歷與運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • Go語(yǔ)言中多字節(jié)字符的處理方法詳解

    Go語(yǔ)言中多字節(jié)字符的處理方法詳解

    這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言中多字節(jié)字符的處理方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • Golang之sync.Pool對(duì)象池對(duì)象重用機(jī)制總結(jié)

    Golang之sync.Pool對(duì)象池對(duì)象重用機(jī)制總結(jié)

    這篇文章主要對(duì)Golang的sync.Pool對(duì)象池對(duì)象重用機(jī)制做了一個(gè)總結(jié),文中有相關(guān)的代碼示例和圖解,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Golang 正則匹配效率詳解

    Golang 正則匹配效率詳解

    這篇文章主要介紹了Golang 正則匹配效率詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • GO語(yǔ)言類型查詢類型斷言示例解析

    GO語(yǔ)言類型查詢類型斷言示例解析

    這篇文章主要為大家介紹了GO語(yǔ)言類型判斷及類型斷言,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • gorm+gin實(shí)現(xiàn)restful分頁(yè)接口的實(shí)踐

    gorm+gin實(shí)現(xiàn)restful分頁(yè)接口的實(shí)踐

    本文主要介紹了gorm+gin實(shí)現(xiàn)restful分頁(yè)接口的實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評(píng)論