




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第Golang繼承模擬實例詳解本文實例講述了Golang繼承模擬實現(xiàn)方法。分享給大家供大家參考,具體如下:
問題由一個需求引起:
web的controller,希望創(chuàng)建一個基類,然后在子類的controller中定義action方法,基類有一個run函數(shù)能根據(jù)字符串自動找到子類的action方法。
如何解決呢?--用繼承
示例分析繼承
首先這個需求是很普遍的,由于腦中有繼承概念,所以想當然地以為這個很容易實現(xiàn):
復制代碼代碼如下:packagemain
import(
"reflect"
)
typeAstruct{
}
func(selfA)Run(){
c:=reflect.ValueOf(self)
method:=c.MethodByName("Test")
println(method.IsValid())
}
typeBstruct{
A
}
func(selfB)Test(sstring){
println("b")
}
funcmain(){
b:=new(B)
b.Run()
}
B繼承A,B中調(diào)用Run方法,自然會調(diào)用到A的Run方法,然后我根據(jù)string“Test”,希望能找到B中(B是子類)的Test方法。
用繼承的觀點看沒錯,實際運行呢?method.IsValid()返回false。很明顯,這里的Test方法是找不到的。
分析問題,首先這里“繼承”兩個詞就用錯了,在go中不應該提及“繼承”這個詞,我更選擇使用“嵌套”這個詞。B是嵌套了A,所以這里的b.Run()實際上是語法糖,調(diào)用的是b.A.Run()。這里Run的全部環(huán)境都在A中。所以是找不到A的Test的。
感謝@hongqirui和@海意,在它們幫忙下找到了解決方法:
復制代碼代碼如下:packagemain
import(
"reflect"
)
typeAstruct{
Parentinterface{}
}
func(selfA)Run(){
c:=reflect.ValueOf(self.Parent)
method:=c.MethodByName("Test")
println(method.IsValid())
}
typeBstruct{
A
}
func(selfB)Test(sstring){
println("b")
}
func(selfB)Run(){
self.A.Run()
}
funcmain(){
b:=new(B)
b.A.Parent=b
b.Run()
}
在父類中加一個interface{}記錄子類??!這樣問題就迎刃而解了!method.IsValid()返回了true。
結
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鄭州商貿(mào)旅游職業(yè)學院《營銷效果評估與分析》2023-2024學年第二學期期末試卷
- 西安科技大學高新學院《劇目與舞臺表演》2023-2024學年第二學期期末試卷
- 湖南信息職業(yè)技術學院《外國人文經(jīng)典(下)》2023-2024學年第二學期期末試卷
- 內(nèi)蒙古工業(yè)職業(yè)學院《創(chuàng)業(yè)實訓》2023-2024學年第二學期期末試卷
- 廣西職業(yè)技術學院《數(shù)據(jù)庫原理與應用(雙語)》2023-2024學年第二學期期末試卷
- 甘肅財貿(mào)職業(yè)學院《工程會計》2023-2024學年第二學期期末試卷
- 成都農(nóng)業(yè)科技職業(yè)學院《環(huán)境影響評價A》2023-2024學年第二學期期末試卷
- 青島農(nóng)業(yè)大學《藥物合成反應A》2023-2024學年第二學期期末試卷
- 鐵嶺衛(wèi)生職業(yè)學院《模擬系統(tǒng)集成一》2023-2024學年第二學期期末試卷
- 2025建筑工程業(yè)主支付擔保合同范本
- 昆蟲標本制作展翅蝴蝶
- 計算機應用技術畢業(yè)論文-計算機應用技術論文5000字
- 《學弈》公開課課件完整版
- 手寫通用收款收據(jù)word模板
- 2022 CSCO肝癌診療指南
- GB/T 4744-1997紡織織物抗?jié)B水性測定靜水壓試驗
- GB/T 17911-2006耐火材料陶瓷纖維制品試驗方法
- GB/T 14206-2005玻璃纖維增強聚酯波紋板
- 人教版PEP英語四年級下冊Unit-5-my-clothes-B-read-and-write課件
- 自治區(qū)促進就業(yè)創(chuàng)業(yè)政策課件
- 陶瓷制作工藝知識課件
評論
0/150
提交評論