每一门语言都会有常量的定义,变量的定义,以及基于这些定义的运算,那么本次将进行Go语言的常量,变量和运算符进行介绍和讲解。
1 常量和变量
常量是定义的一个不被改变的值,在程序运行过程中是不允许被改变的。而变量是可以被改变和赋值以及修改的。常量和变量的数据类型都可以是布尔类型,数字类型(整型,浮点型,和复数类型),以及字符串类型。常量常见的定义格式有:
const constName type = value
包含const, 常量的名字,常量的类型,以及常量的值。
变量的定义有:
var varName type = value
类似的定义,也包含了var,变量名字,变量的类型,以及变量的值。
常量和变量除了显式的定义,还有隐式的定义,如:
const constName = "stringConst"
var varName = value
varName := value
2 运算符内容
常见的运算符类型有,算数运算符,关系运算符,逻辑运算符,位运算符,赋值运算符,其他的运算符。
2.1 算数运算符
加减乘除(+,-,*,/)、求余(%)、自增(++)、自减(–)
2.2 关系运算符:
判断相等(==),判断不相等(!=),左值比右值大(>),左值比右值小(<),左值大于等于右值(>=),左值小于等于右值(<=)
2.3 逻辑运算符
逻辑与(AND)运算符&&, 逻辑或(OR)运算符||,逻辑非(NOT)运算符!。逻辑运算和语言无关,所有语言的逻辑运算都是通用的并且满足以下规则:
- true && true为true
- true && false为false
- true || true 为true
- true || false为true
- false || false为false
- !true 为false
- !false为true
2.4 位运算符
计算机中位运算是常见的运算,位运算的操作和定义为:
a b a&b a|b a^b
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0
Go语言支持的位运算符有与(&),或(|),异或(^),和左移(<<),右移(>>)。
左移位数相当于乘以2的n次方,在位数操作中右边补0;右移相当于除以2的n次方,在位数操作中左边补0。
2.5 赋值运算符
赋值运算符除了基础的赋值运算符(=)之外,有些综合的写法如下:
+= 先加再赋值
-= 先减再赋值
*= 先乘再赋值
/= 先除再赋值
%= 先求余再赋值
<<= 左移后再赋值
>>= 右移后再赋值
&= 按位与后再赋值
|= 按位或后再赋值
^= 按位异或后再赋值
2.6 其他运算符
主要是取地址操作和*的指针的值操作。保留了c语言中基本的操作内容地址和内存存储内容的方便性操作。
3 运算符的优先级
运算符 优先级
^ ! 7
* / % << >> & &^ 6
+ - | ^ 5
== != < <= >= > 4
<- 3
&& 2
|| 1
如果对于运算符的优先级不是记忆得很清晰,可以使用括号的方式来圈定优先级顺序。使用括号的编程习惯也是一个非常不错的编码习惯。
4 总结和经验
在工程项目和代码模块设计中,对于不变的变量,一般避免deadcode的模式而采用常量定义的模式,并且对于要考虑安全保密因素的配置项一般也写成常量的模式。全局使用的变量定义一般在变量命名的时候采用固定前缀的方法来标识这是个全局变量,但是对于全局变量比如数据库访问对象,需要考虑多线程使用时候的安全问题,这个时候需要将数据库访问全局变量封装到类(struct)中,访问方式都是通过方法,并且使用单例的定义模式。而运算符的优先级顺序,是需要掌握的,当然如果着实记不住了,或许可以考虑良好的增加括号的编程习惯。对于位运算常见于网络通信的自定义字节流协议的某些字段进行checksum的时候进行一种简单的移动来加解密的算法构成,以及偏硬件的底层嵌入式的代码开发中较常见。
关于本专栏——Go 语言教程,专栏致力于为希望可以系统地,一条一条地,一步一步的学习Go语言的朋友提供一个可以持续阅读的地方,当然也希望可以通过我的实践经验以及相应的基础,可以给你一些学习之外的想法和总结,以及提高。如果真的有帮助,哪怕一点点,可以把这个一点点的提高分享给我,欢迎跟我勾搭联系。