Go语言学习7:Go语言为什么要用变量名后置的方式做声明

来源:互联网 发布:德国足球知乎 编辑:程序博客网 时间:2024/04/29 21:36

我一直很好奇,Go语言为什么要采用这种把类型放在后面的声明方式。今天得空来学习一下:

首先,我们来看一下c语言的声明方式:

int x;这是一个典型的c语言声明,它声明了一个整型的变量x。这样看来c语言的声明还算是简单明了,但是当遇到指针声明,尤其是函数指针的时候,问题就变得复杂了,就不是一眼能够看清楚的了:

int (*fp)(int (*ff)(int x, int y), int b)
上面声明了一个函数指针fp,该函数带有连个参数,第一个是一个函数指针,第二个是一个整数,我们知道c语言声明的时候是可以不带变量名的,于是,上面的声明可以修改为下面的这个样子:

int (*fp)(int (*)(int, int), int)
这样的表达已经有点看不清楚了,如果函数的返回值也是函数指针:
int (*(*fp)(int (*)(int, int), int))(int, int)

哦,我的天啊,杀了我吧……………………,还能很轻松的看出来谁是谁不?这变得连他妈都不认识了。

下面,我们来看看Go语言的声明方式:

也有很多非类c的语言,才有了变量名前置的声明方式:

x: intp: pointer to inta: array[3] of int
但是,这个方式还是有点繁琐,于是Go做了简化,删除了冒号和部分关键字:

x intp *inta [3]int
现在我们直接将上面的c语言的声明:

int (*(*fp)(int (*)(int, int), int))(int, int)
修改为Go的声明方式:

f func(func(int,int) int, int) func(int, int) int
怎么样,这样子读起来是不是比较顺畅了。虽然也去掉了变量名,但是好不妨碍我们从左向右读取,理解也很方便。

不过,Go语言在变量名后置方面也没有做的太彻底:

例如:声明 var p *int

在使用的时候就变成了*p,不过这也是没有办法的事情,因为,如果继续写为p*,这个时候很容易和表示乘法的型号混淆。


以上就是个人的一些见解,不足之处还请大家一起讨论讨论……

原创粉丝点击