• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    深入理解GO语言的面向对象

    前言

    有过C++语言学习经历的朋友都知道,面向对象主要包括了三个基本特征:封装、继承和多态。封装,就是指运行的数据和函数绑定在一起,C++中主要是通过this指针来完成的;继承,就是指class之间可以相互继承属性和函数;多态,主要就是用统一的接口来处理通用的逻辑,每个class只需要按照接口实现自己的回调函数就可以了。

    作为集大成者的Go语言,自然不会在面向对象上面无所作为。相比较C++、Java、C#等面向对象语言而言,它的面向对象更简单,也更容易理解。

    go语言中并没有像C++,Java语言中这类的Class,它只含有像C语言中的结构体,用结构体和指针等特性,完成一个类的作用,很巧妙的使用了指针和结构体,不仅是go的面向对象,包括go语言中的map等操作都是借助了结构体。其实,说白了,C++、Java等面向对象的语言中,类的底层实现就是结构体,对象的引用就是指针,只是语言把他们封装起来了而已。然而这使得很多人刚接触面向对象的时候很不理解这些东西。

    下面,说所面向对象在go中的写法:

    如果我们要再Java中定义一个Rect,可以求其面积,我们应该这么写

    public class Rect {
     public int x;
     public int y;
     public int Area() {
     return x*y;
     }
    }

    很简单,那么Go语言中怎么做呢?Go中并不存在所谓的类,所有的类都是用结构体表示的,所以要写一个类,我们先得定义一个结构体:

    type Rect struct {
     x, y int
    }

    这是一个Rect的结构体,那么一个类中,不仅要存在变量,还要有成员函数,那么go的成员函数是这么写的:

    func (r *Rect) Area() int {
     return r.x*r.y
    }

    这个成员函数的功能是求面积的,显然,这个成员函数值对Rect的结构体适用,这样就实现了所谓的封装,那么,我们如何去创建并初始化类的实例呢

    go语言提供了很多方式:

    rect :=new(Rect)
    rect :=Rect{}
    rect :=Rect{1,2}
    rect :=Rect{x:3,y:4}

    那么,一遍情况下,如果没有指定成员变量的大小,go语言会默认初始化成员变量为0,bool类型的为false

    那么,构造函数呢?

    我们可以这么来写:

    func NewRect(x,y int) *Rect {
     return Rect{x,y}
    }

    其实,这也是我们平时new一个对象时候的真正操作,只是go把他真正展现给我们了。

    看到这里,我们似乎还有一个疑问,那就是,像java、C++中对于可见性的描述呢,go语言中不存在public等关键字,go语言中直接选择用字母大小写控制。

    一个变量以大写字母开头则表示对其他包可见,如果想要不可见,那么使用小写字母即可,但是go语言中的可见性控制只是针对包的,并不针对类,也就是,同一个包下的类都是可见的。这个时候我们就可以知道了为什么输出语句是这样写的了吧:

    fmt.Println("hello world")

    因为此函数对其他包是可见的。

    总结

    以上就是GO语言面向对象的全部内容,希望这篇文章的内容对大家学习或者使用GO语言能有所帮助,如果有疑问大家可以留言交流。

    您可能感兴趣的文章:
    • Golang排列组合算法问题之全排列实现方法
    • Go语言对字符串进行SHA1哈希运算的方法
    • GO语言运行环境下载、安装、配置图文教程
    • go语言文件正则表达式搜索功能示例
    • Go语言正则表达式用法实例小结【查找、匹配、替换等】
    • Go语言中三种不同md5计算方式的性能比较
    • Go语言中反射的正确使用
    • PHP与Go语言之间的通信详解
    • 利用Go语言实现简单Ping过程的方法
    • Go语言如何并发超时处理详解
    • Go语言实现的排列组合问题实例(n个数中取m个)
    上一篇:深入理解golang的基本类型排序与slice排序
    下一篇:Go语言实现字符串切片赋值的方法小结
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    深入理解GO语言的面向对象 深入,理解,语言,的,面向,