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方法。如何解決呢?用繼承 示例分析繼承 首先這個需求是很普遍的,由於腦中有繼承概念,所以想當然地以為這個很容易實現 複製...