【Go语言】【3】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语言是一门看似简单实际并不简单,貌似外表丑陋实则另有考究的语言。



时间: 2024-10-24 19:37:14

【Go语言】【3】GO语言常量与变量的相关文章

C语言入门教程-(4)常量和变量

1.常量和变量的概念 程序执行过程中其值不能发生改变的量叫做常量,其值能发生改变的量叫做变量.常量可以直接使用,而变量则必须先定义后才能使用,否则编译器会报错. 2.常量和变量的命名规范 在介绍常量和变量的命名规范之前,我们先了解一下什么是标识符和关键字. 1)标识符 标识符,用来标识符号常量名.变量名.函数名.数组名.文件名.类名.对象名等.简单的将就是大家取的名字~~有效标识符的构成规则如下: 1)第一个字符必须是字母(大小写都行)或下划线,不能是数字; 2)后跟字母(大小写都行).下划线或

C语言的数据、常量和变量

一.数据 图片文字等都是数据,在计算机中以0和1存储. (一)分类 数据分为静态数据和动态数据. ①. 静态数据:一些永久性的的数据,一般存储在硬盘中,只要硬盘没坏数据都是存在的.一般以文件的形式存储在硬盘上,电脑关机重启后依然存在. ②. 动态数据:程序运行过程中,动态产生的的临时数据,一般存储在内存中,内存的存储空间一般较小,计算机关闭后这些数据就会被清除.软件或者电脑关闭则这些临时数据会被清除. ③. 静态数据和动态数据可以转换. ④. 注意:为什么不把动态数据存放到硬盘?因为直接访问内存

JavaScript语言常量和变量

我们在上一章中介绍使用JavaScript编写一个HelloJS的小程序,其中我们就用到变量.常量和变量是构成表达式的重要组成部分.常量在声明和初始化变量时,在标识符的前面加上关键字const,就可以把该指定为一个常量.顾名思义,常量是其值在使用过程中不会发生变化,实例代码如下:const NUM=100;NUM标识符就是常量,只能在初始化的时候被赋值,我们不能再次给NUM赋值.变量在JavaScript中声明变量,是在标识符的前面加上关键字var,实例代码如下:var scoreForStud

Swift语言指南(一)--语言基础之常量和变量

Swift 是开发 iOS 及 OS X 应用的一门新编程语言,然而,它的开发体验与 C 或 Objective-C 有很多相似之处. Swift 提供了 C 与 Objective-C 中的所有基础类型,包括表示整数的 Int,表示浮点数的 Double 与 Float,表示布尔值的 Bool,以及表示纯文本数据的 String. Swift 还为两个基本集合类型 Array 与 Dictionary 提供了强大的支持,详情可参考 (集合类型)Collection Types. 与 C 语言类

C语言常量与变量

对于基本数据类型量,按其值是否可变又分为常量和变量两种. 在程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量.它们可与数据类型结合起来分类,例如,可分为整型常量.整型变量.浮点常量.浮点变量.字符常量.字符变量. 常量 在程序执行过程中,其值不发生改变的量称为常量.常量分类: 常量 说明 直接常量(字面量) 可以立即拿来用,无需任何说明的量,例如: 整型常量:12.0.-3: 实型常量:4.6.-1.23: 字符常量:‘a’.‘b’. 符号常量 用标识符代表一个常量.在C语言中,

05.C语言数据、常量和变量

C语言数据.常量和变量 图片文字等都是数据 ,在计算中的0和1存储 一.分类 数据分成静态数据和动态数据. 1.静态数据:一些永久性的数据,一般存储在硬盘中,只要硬盘没有损坏数据都是存在的 一般以文件的形式存储在硬盘上,电脑关机启动依然存在 2.动态数据:程序运行过程中,动态产生的临时数据,一般存储在内存中,内存的存储空间一般较小,计算机关闭 后这些数据就会被清除,软件或者电脑关闭则这些临时数据也会被清除. 3.静态数据和动态数据可以转换. 4.为什么不把动态数据存放到硬盘?因为直接访问内存速度

黑 马 程 序 员_视频学习总结<c语言>----01 关键字、标识符、注释、 常量、变量

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.关键字 1.关键字就是C语言提供的有特殊含义的符号,有些地方也叫做“保留字”. 2.C语言一共提供了32个关键字,这些关键字都被C语言赋予了特殊含义. auto double int struct break else long switch case enum register typedef char extern return uni

?Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数

Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数 7.4.4  为外部参数设置默认值 开发者也可以对外部参数设置默认值.这时,调用的时候,也可以省略参数传递本文选自Swift1.2语言快速入门v2.0. [示例7-11]以下的代码就为外部参数toString.withJoiner设置了默认的参数"Swift"和"---".代码如下: import Foundation func join(string s1: String, toString

C语言————常量 、变量、 表达式、 语句详谈

常量 常量(Constant)是程序中最基本的元素,有字符(Character)常量. 整数(Integer)常量.浮点数(Floating Point)常量和枚举常量. 下面看一个例子: printf("character: %c\n  integer: %d\n  floating point: %f\n", '}', 34, 3.14); 常量在程序加载内存的常量区,即.data段 字符常量要用单引号括起来,注意单引号只能括一个字符而不能像双引号那样括一串字符, 字符常量也可以是