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

cs5512 · · 2319 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

我一直很好奇,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: int
p: pointer to int
a: array[3] of int
但是,这个方式还是有点繁琐,于是Go做了简化,删除了冒号和部分关键字:

x int
p *int
a [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*,这个时候很容易和表示乘法的型号混淆。


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


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2319 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传