博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GO语言面向对象
阅读量:4647 次
发布时间:2019-06-09

本文共 1291 字,大约阅读时间需要 4 分钟。

当初开发go语言的时候就是因为C++的特性太过于繁杂,从而使得很多C++的开发者因为C++的特性而头疼,go语言成功的精简了C++的特性,使其很简洁,很少的特性,却可以完成很多的事情。

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

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

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

1 public class Rect {2     public int x;3     public int y;4     public int Area() {5         return x*y;6     }7 }

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

1 type Rect struct {2     x, y int3 }

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

1 func (r *Rect) Area() int  {2     return r.x*r.y3 }

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

go语言提供了很多方式:

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

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

那么,构造函数呢?

我们可以这么来写:

1 func NewRect(x,y int) *Rect {2     return &Rect{x,y}3 }

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

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

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

1 fmt.Println("hello world")

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

转载于:https://www.cnblogs.com/Summer7C/p/5926761.html

你可能感兴趣的文章
字节对齐2
查看>>
kafka幂等producer
查看>>
与Win8之磁盘活动时间100%斗争心得
查看>>
Matrix: android 中的Matrix (android.graphics.Matrix) (转)
查看>>
Android中处理崩溃异常
查看>>
Day7—socket进阶
查看>>
只读数据文件损坏恢复
查看>>
转过来的,可以看下
查看>>
windows搭建SVN服务MD版
查看>>
HashMap的工作原理
查看>>
一碗饭
查看>>
floyd求最小环 模板
查看>>
SqlServer索引的原理与应用
查看>>
使用Kubeadm搭建Kubernetes(1.12.2)集群
查看>>
微信小程序获取当前地址以及选择地址详解 地点标记
查看>>
任务平均分配的小算法
查看>>
学习日报 7-10(验证码)
查看>>
No.3 - CSS transition 和 CSS transform 配合制作动画
查看>>
c++STL全排列
查看>>
日期和时间模块
查看>>