码迷,mamicode.com
首页 > 编程语言 > 详细

【Go语言】【3】GO语言常量与变量

时间:2015-02-16 22:17:29      阅读:277      评论:0      收藏:0      [点我收藏+]

标签:go   变量   常量   

  一般的语言入门都会讲一堆背景和特性,这样做的目的是为了能让学习者对该语言有一个大概的认识,这也是为何有人推荐正确的读书方法是先粗略地读一遍,然后再详细地读一遍,但这里我想直接进入细节,不是因为个性,而是因为常量和变量是编程语言最基本的组成元素。

一、字面常量

以前在编程时,老员工总是说不要在代码中出现魔鬼数字,什么是魔鬼数字呢?就是在代码中直接写死且只出现一次的数字,例如:

func calculatePrice(price float32) float32{

  return price * 0.8

}

这里的0.8即为魔鬼数字,因为它只出现了一次且是在代码中直接写死的,这样做的坏处是不能清楚地表达0.8的含义,而编码人员心里知道0.8即为折扣的意思


这里的魔鬼数字就是字面常量的一种,还包括下面列举的字面常量

3.1415926535897932 // 浮点类型的字面常量

-12           //整数类型的字面常量

true          //布尔类型的字面常量

"ok"          //字符串类型的字面常量


二、常量

和其它语言(C、C++、Java等)类似,由const关键字修饰的名字就是常量,例如:

const PI float = 3.1415926535897932

const value int = -12

const flag bool = true

const str string = "ok"


有使用过其它语言的读者看到上面的代码估计不太习惯,原因有二:

(1)惯常量名都是用大写字母来表示

(2)类型都是放在常量名的前面。

不过没有关系,按这种习惯写上个30来遍就感觉顺眼了 :)


三、变量

GO用var关键字修饰变量,例如:

var value int      // 整型变量

var address string   // 字符串变量

var money [12]float  // 浮点型数组变量

var Person struct{   // 结构变量

  name string

  age int

  phoneNum int

}

var point *int      // 指向int类型的指针变量


四、GO常量/变量特点

1、没有private、protected、public修改符

有过Java开发经验的读者都清楚private、protected、public修饰符,但GO对你说sorry。但GO怎么区分哪些常量/变量是对内的,哪些是对外的呢?

答案是常量名/变量名的首字母是否大写,若首字母大写则是对外的首字母小写则是对内的

由于GO的粒度是针对包的,所以这里的对内对外意思是指包内是否可见。


举例:

const PI float = 3.1415926535897932  // 浮点常量

const value int = -12           // 整形常量

var money [12]float            // 浮点型数组变量

var Person struct{             // 结构变量

  name string

  age int

  phoneNum int

}

这里的PI、Person是包外可见的,value、money是包内可见的



2、类型放在常量名/变量名的后面

有过Java开发经验的读者都比较熟悉public int value = 10这种定义方式,类型放在变量名value的前面,但GO恰恰相反,偏偏把类型放在后面,于是大牛们就出来解释了,这样做的目的是为了避免程序员重复写const或var关键字。我们不争论这种解释是否恰当,但这样写是自然而言地发生。


举例:

这里有两个变量,一个是int类型的,一个是字符串类型的,平时我们是这样定义

var value int

var name string

但在GO中也可以这样定义

var (

   value int

   name string

)

这样就少写一个var关键字



3、常量/变量定义语句不用分号结束

在Java或C等语言中,一般都是这样定义:const str string = "ok";但在GO中懒得把分号(;)都省略了。刚开始写GO代码好不习惯,总是在后面追加一个分号,然而一保存Sublime text很贴心地帮我省略掉了


4、常量定义的右值可以是一个编译期运算的常量表达式

例如:

const algorithm = 255 >> 2

这点与其它语言类似,也容易理解,若右值是运行期才能得到的结果表达式

const Port = os.GetEnv("Port")

那么在编译期并不能确定该值,会出现编译错误



【编后话】:

开始接触GO,感觉它就是一个大杂烩,里面即有C语言的影子,也有Java语言的影子,也有JavaScript脚本的影子,同时还有Pascal语言的痕迹,但使用使用着感觉这符合人的正常思维,代码想怎么写就怎么写,无论怎么写好像都符合GO的语法。借用知乎用户的话讲:GO语言是一门看似简单实际并不简单,貌似外表丑陋实则另有考究的语言。



本文出自 “青客” 博客,请务必保留此出处http://qingkechina.blog.51cto.com/5552198/1614703

【Go语言】【3】GO语言常量与变量

标签:go   变量   常量   

原文地址:http://qingkechina.blog.51cto.com/5552198/1614703

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!