• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Golang > Golang继承模拟实例详解

Golang继承模拟实例详解

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了golang 实例,golang 继承,golang,golang语言,golang教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了Golang继承模拟实现方法。分享给大家供大家参考,具体如下:

问题由一个需求引起:

web的controller,希望创建一个基类,然后在子类的controller中定义action方法,基类有一个run函数能根据字符串自动找到子类的action方法。

如何解决呢? -- 用继承

示例分析继承

首先这个需求是很普遍的,由于脑中有继承概念,所以想当然地以为这个很容易实现:
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()
}</div>
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和@海意,在它们帮忙下找到了解决方法:
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()
}</div>
在父类中加一个interface{}记录子类!!这样问题就迎刃而解了!method.IsValid()返回了true。

结论

所以在golang中要模拟普通的继承,除了使用嵌套之外,还需要在父类中“注册”子类的信息!

希望本文所述对大家Go语言程序设计有所帮助。

</div>

您可能想查找下面的文章:

  • Golang继承模拟实例详解
  • Golang中的sync.WaitGroup用法实例
  • 在Golang中使用C语言代码实例

相关文章

  • 深入分析golang多值返回以及闭包的实现
  • 深入解析Go语言中for循环的写法
  • Go语言的GOPATH与工作目录详解
  • go语言通过管道连接两个命令行进程的方法
  • 谈谈Go语言的反射三定律
  • Go语言中的内存布局详解
  • go语言简单网络程序实例分析
  • Go语言对字符串进行SHA1哈希运算的方法
  • Go语言生成素数的方法
  • Go语言通过Luhn算法验证信用卡卡号是否有效的方法

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Go语言文件操作的方法
    • golang解析xml的方法
    • Go语言实现Fibonacci数列的方法
    • go语言在请求http时加入自定义http header的方法
    • golang判断chan channel是否关闭的方法
    • go语言遍历文件夹示例
    • 深入剖析Go语言编程中switch语句的使用
    • golang网络socket粘包问题的解决方法
    • Go语言中数组的基本用法演示
    • Golang中channel使用的一些小技巧

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有