Go语言基础(常量、运算符)
一、常量
1.1 常量定义
- 变量:在程序运行中可以被修改的量。
常量:在程序运行中不可以被改变的量。 - 常量的定义是通过
const
关键字完成的,并且建议常量名称大写。格式:const identifier [type] = value
。- 示例:显示定义
const PI float64 = 3.1415926
。
\ \qquad 隐式定义const PI = 3.1415926
。
- 示例:显示定义
-
Go
语言常量只能是布尔型、数字型(整数型、浮点型和复数)和字符串型。 - 常量在定义时,必须赋初值,因为
Golang
的常量不可被修改,因此,如果不赋初值,那么常量永远没有值。
1.2 字面常量
\quad
编程语言源程序中表示固定值的符号叫做字面量,也称字面常量。字面量可以被编程语言编译器直接转换为某个类型的值。Go
的字面量可以出现在两个地方:一是用于常量和变量的初始化,二是用在表达式中作为函数调用实参。如果变量初始化语句中如果没有显式地指定变量类型,则Go
编译器会结合字面量的值自动进行类型推断。Go
中的字面量只能表达基本类型的值。
-
整型字面量:整型字面量使用特定的字符序列表示具体的整型数值。常用于整型变量或常量的初始化。例如:
42
、0X6F
。 -
浮点型字面量:浮点型字面量使用特定字符序列来表示一个浮点数值。它支持两种格式:一种是标准的数学小数形式,例如:
0.23
;另一种是科学计数法,例如:1E6
。 -
字符型字面量:
Go
的源码采用UTF-8
的编码方式,UTF-8
字符占用1~4
个字节。Go
的字符采用一对单引号包裹。例如:'a'
、'本'
、'\n'
、'\000'
、'\x0f'
、'\u12e4'
。 -
字符串字面量:
Go
中的字符串字面量表现形式是采用一对双引号或一对反引号 “ ` ” 包裹的字符字面量或其编码值。
1.3 常量命名规范
- 只能由数字、字母、下划线(
_
)组成; - 不能以数字开头;
- 大写字母和小写字母是不同的,但是建议全部大写;
- 不能是关键字;
- 见名知意;
- 多个单词组成的名称,使用全大写字母书写,每个单词之间使用下划线(
_
)分隔。- 示例:
const APP_VER = "0.7.0.1110 Beta"
- 示例:
二、运算符
\quad
Golang
中运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
2.1 算术运算符
\quad
在Golang
中,算术运算符是对数值类型的变量进行运算的,比如:加、减、乘、除和取模。
- 除法运算
/
,如果是整数之间做除法运算时,只保留整数部分而舍弃小数部分。 - 除法(
/
)和取模(%
)运算除数不能为0
。 -
Golang
中的自增运算和自减运算只能当做一个独立语句使用,Golang
中只支持后自增和后自减。在Golang
中,+
可以用于字符串的拼接。
案例1
- 输入半径,计算圆的面积和周长并打印出来(
PI
为3.14
)func main() { const PI = 3.14 var radius float64 fmt.Print("请输入圆的半径:") fmt.Scanf("%f", &radius) area := PI * radius * radius circumference := 2 * PI * radius fmt.Printf("半径为%.2f的圆的周长为:%.2f,面积为:%.2f", radius, circumference, area) }
案例2
- 某学生三门课成绩为:语文
90
、数学89
、英语69
,编程求总分与平均分func main() { var chinese int16 = 90 var math int16 = 89 var english int16 = 69 total := chinese + math + english average := float64(total) / 3 fmt.Printf("语文、数学和英语三科总分:%d,平均分:%.2f", total, average) }
案例3
-
问题1:某商店
T
恤(T-shirt
)的价格为35
元/件,裤子(trousers
)的价格为120元/条。小明在该店买了3
件T
恤和2条裤子,并且打8.8
折。请计算并显示小明应该付多少钱? -
问题2:如上题中打完
8.8
折后出现小数,商店为了结算方便,只收用户整数部分的钱,例如:本应收用户303.6
,现在只收用户303
元,应该如何做?func main() { const T_shirt int64 = 35 const trousers int64 = 120 total := float64(T_shirt*3+trousers*2) * 0.88 fmt.Printf("小明应该付:%.2f元\n", total) fmt.Printf("只收取小明整数部分的钱:%d元", int(total)) }
案例4
- 使用
+
运算符,实现字符串拼接。func main() { var str1 = "Xin" var str2 = "Dong" var str = str1 + str2 fmt.Println(str) }
2.2 赋值运算符
\quad
在Golang
中,赋值运算符是对已存在的变量进行重新设置新值的运算符。
-
十进制运算
-
二进制运算
- 对于正数来说,左移相当于乘以
2
,左移N
位,就是乘以2
的N
次方(效率比乘法高)。 - 对于正数来说,右移相当于除以
2
,右移N
位,就是除以2
的N
次方(效率比乘法高)。
- 对于正数来说,左移相当于乘以
- 注意:算术运算符与赋值运算符连用时,算术运算符优先级高于赋值运算符。
2.3 关系运算符
\quad
在Golang
中,关系运算符的结果都是bool
型,也就是要么是true
,要么是false
。关系表达式经常用在if
结构的条件中或循环结构的条件中。
\quad
- 注意:算术运算符、关系运算符和赋值运算符连用时,算术运算符优先级高于关系运算符,关系运算符优先级高于赋值运算符。
2.4 逻辑运算符
\quad
在Golang
中,逻辑运算符是用于连接多个条件(一般来讲就是关系表达式),最终的结果也是一个bool
值。
2.5 指针运算符
\quad
在Golang
中,指针运算符主要包括取地址运算符&
和取值运算符*
。
\quad
2.6 位运算符
\quad
在Golang
中,位运算符主要是用于数值类型的二进制的运算。
2.7 运算符优先级
\quad 我们知道,在数学运算中,有“先乘除后加减”的运算规则,在我们程序语言中一样有运算符的优先级问题。
\quad 所谓运算符的优先级,指的是在含有多个逻辑运算符的式子中,到底应该先计算哪一个,后计算哪一个。
\quad
Go
语言中运算符的运算规则是,优先级高的运算符先执行,优先级低的运算符后执行,同一优先级的运算符按照从左到右的顺序进行。
\quad
需要注意的是,Go
语言中大部分运算符都是从左向右执行的,只有单目运算符、赋值运算符它们是从右向左执行的。
\quad
Go
语言运算符中,如果有小括号,即()
,则小括号的优先级最高。
- 单目运算符是指运算所需变量为一个的运算符,即在运算当中只有一个操作数。
- 例:
++
、--
、!
、&
、*
(指针
)、&
、+
(正号
)、-
(负号
)
- 例:
- 运算所需变量为两个的运算符叫做双目运算符。
- 例:
+
、-
、*
、/
、<=
、>=
等等。
- 例:
案例
- 让用户输入一个年份,如果是闰年,则输出
true
,如果不是,则输出false
。- 闰年的判定(符合下面两个条件之一):
- 年份能够被
400
整除; - 年份能够被
4
整除,但是不能被100
整除。
- 年份能够被
func main() { var year int64 fmt.Print("请输入一个年份:") fmt.Scanln(&year) var b bool = (year%4 == 0 && year%100 != 0 || year%400 == 0) fmt.Printf("%d年是闰年吗?%t", year, b) }
- 闰年的判定(符合下面两个条件之一):