Golang之繼承模擬

2021-09-22 14:14:42 字數 1105 閱讀 4861

web的controller,希望建立乙個基類,然後在子類的controller中定義action方法,基類有乙個run函式能根據字串自動找到子類的action方法。

如何解決呢? -- 用繼承

首先這個需求是很普遍的,由於腦中有繼承概念,所以想當然地以為這個很容易實現:

package main

import(

"reflect"

)type a struct

func (self a)run()

type b struct

func (self b)test(s string)

func main()

b繼承a,b中呼叫run方法,自然會呼叫到a的run方法,然後我根據string「test」,希望能找到b中(b是子類)的test方法。

用繼承的觀點看沒錯,實際執行呢?method.isvalid() 返回false。很明顯,這裡的test方法是找不到的。

分析問題,首先這裡「繼承」兩個詞就用錯了,在go中不應該提及「繼承」這個詞,我更選擇使用「巢狀」這個詞。b是巢狀了a,所以這裡的b.run()實際上是語法糖,呼叫的是b.a.run()。這裡run的全部環境都在a中。所以是找不到a的test的。

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

package main

import(

"reflect"

)type a struct

}func (self a)run()

type b struct

func (self b)test(s string)

func (self b)run()

func main()

在父類中加乙個inte***ce{}記錄子類!!這樣問題就迎刃而解了!method.isvalid()返回了true。

所以在golang中要模擬普通的繼承,除了使用巢狀之外,還需要在父類中「註冊」子類的資訊

外友情幫忙推薦下@海意 所在公司的團隊自產自銷的web框架golanger。

Golang之繼承模擬

web的controller,希望建立乙個基類,然後在子類的controller中定義action方法,基類有乙個run函式能根據字串自動找到子類的action方法。如何解決呢?用繼承 首先這個需求是很普遍的,由於腦中有繼承概念,所以想當然地以為這個很容易實現 1 2 3 4 5 6 7 8 9 1...

Golang之繼承模擬

web的controller,希望建立乙個基類,然後在子類的controller中定義action方法,基類有乙個run函式能根據字串自動找到子類的action方法。如何解決呢?用繼承 首先這個需求是很普遍的,由於腦中有繼承概念,所以想當然地以為這個很容易實現 1 2 3 4 5 6 7 8 9 1...

Golang繼承模擬例項詳解

問題由乙個需求引起 web的controller,希望建立乙個基類,然後在子類的controller中定義action方法,基類有乙個run函式能根據字串自動找到子類的action方法。如何解決呢?用繼承 示例分析繼承 首先這個需求是很普遍的,由於腦中有繼承概念,所以想當然地以為這個很容易實現 複製...