Go语言学习7:Go语言为什么要用变量名后置的方式做声明
2013-09-07 11:39
483 查看
我一直很好奇,Go语言为什么要采用这种把类型放在后面的声明方式。今天得空来学习一下:
首先,我们来看一下c语言的声明方式:
int x;这是一个典型的c语言声明,它声明了一个整型的变量x。这样看来c语言的声明还算是简单明了,但是当遇到指针声明,尤其是函数指针的时候,问题就变得复杂了,就不是一眼能够看清楚的了:
上面声明了一个函数指针fp,该函数带有连个参数,第一个是一个函数指针,第二个是一个整数,我们知道c语言声明的时候是可以不带变量名的,于是,上面的声明可以修改为下面的这个样子:
这样的表达已经有点看不清楚了,如果函数的返回值也是函数指针:
哦,我的天啊,杀了我吧……………………,还能很轻松的看出来谁是谁不?这变得连他妈都不认识了。
下面,我们来看看Go语言的声明方式:
也有很多非类c的语言,才有了变量名前置的声明方式:
但是,这个方式还是有点繁琐,于是Go做了简化,删除了冒号和部分关键字:
现在我们直接将上面的c语言的声明:
修改为Go的声明方式:
怎么样,这样子读起来是不是比较顺畅了。虽然也去掉了变量名,但是好不妨碍我们从左向右读取,理解也很方便。
不过,Go语言在变量名后置方面也没有做的太彻底:
例如:声明 var p *int
在使用的时候就变成了*p,不过这也是没有办法的事情,因为,如果继续写为p*,这个时候很容易和表示乘法的型号混淆。
以上就是个人的一些见解,不足之处还请大家一起讨论讨论……
首先,我们来看一下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语言学习-变量声明
- Go语言学习笔记 --- 常量、变量、批量定义与声明、数据类型、类型别名、类型转换
- go学习笔记1--变量声明
- go语言的变量声明
- php——学习笔记,变量声明以及3种赋值方式
- JavaScript学习笔记-JavaScript声明全局变量三种方式的异同
- Go语言学习(三)-----变量、基本类型
- Go语言学习笔记(4)-共享变量访问
- Go语言学习教程之声明语法(译)
- Go语言学习笔记-变量
- Java第一课 Java的一些基本概念,Java的起源、为什么我们要学习Java语言,Java跨平台原理剖析;Java环境变量的配置,初学者常犯的问题,Java语言的基本数据类型和Java的语句。
- Go语言学习笔记(二) [变量、类型、关键字]
- go语言学习笔记(4) 变量
- go语言变量声明后的默认值
- 为什么要学习Go语言
- go语言学习-多重返回和匿名变量
- C#语言学习:变量的声明与初始化的范围(对比C++)
- C#语言学习:变量的声明与初始化的范围(对比C++)
- Go语言学习笔记1 变量,类型以及赋值
- Go语言中的变量声明和赋值