Golang之繼承模擬

2021-06-22 23:15:20 字數 2661 閱讀 5992

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

如何解決呢? -- 用繼承

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

package main

import(

"reflect"

)

type astruct

func (self a)run()

type bstruct

func (self b)test(sstring)

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和@海意,在它們幫忙下找到了解決方法:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

package main

import(

"reflect"

)

type astruct

}

func (self a)run()

type bstruct

func (self b)test(sstring)

func (self b)run()

func main()

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

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

Golang之繼承模擬

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

Golang之繼承模擬

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

Golang繼承模擬例項詳解

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