该文章Github地址:https://github.com/AntonyCheng/go-notes【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】
在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】& CSDN文章地址:https://blog.csdn.net/AntonyCheng/article/details/136555245),该模板集成了最常见的开发组件,同时基于修改配置文件实现组件的装载,除了这些,模板中还有非常丰富的整合示例,同时单体架构也非常适合SpringBoot框架入门,如果觉得有意义或者有帮助,欢迎Star & Issues & PR!
上一章:由浅到深认识Go语言(3):数据类型
4.常量
常量的定义
常量,顾名思义在程序运行期间不可以改变的量;
基本格式
const 常量名 数据类型 = 常量值
示例如下:
package main
import "fmt"
func main() {
const PI float64 = 3.14
fmt.Printf("%.2f", PI)
}
打印效果如下:
常量命名规范
- 只能由数字,字母和下划线组成;
- 不能以数字开头;
- 常量命名规范通常是使用全大写,单词与单词之间使用
_
隔离开; - 不能是关键字;
- 见名知意
常量注意事项
- 不允许修改常量的值
- 不允许打印常量的地址
字面常量
所谓字面常量(literal),指的是程序中硬编码的常量,例如:
123
3.1415
true
"foo"
iota枚举
常量声明可以使用iota常量生成器初始化,它用于生成一组以相似规则初始化的常量,但是不用每行都写一遍初始化表达式。
注意:在一个const声明语句中,在第一个声明的常量所在的行,iota将会被置为0,然后在每一个有常量声明的行加一。
具体使用方式如下:
package main
import "fmt"
func main() {
//1、iota常量自动生成器,每个一行,自动累加1
//2、iota用于常量赋值
const (
a = iota
b = iota
c = iota
)
fmt.Println("line1 =", a, b, c)
//3、iota遇到const,会被重置为0
const d = iota
fmt.Println("line2 =", d)
//4、可以只写一个iota
const (
e = iota
f
g
)
fmt.Println("line3 =", e, f, g)
//5、如果是同一行,值都一样
const (
h = iota
i, j, k = iota, iota, iota
l = iota
)
fmt.Println("line4 =", h, i, j, k, l)
}
打印效果如下:
5.运算符
5.1.算术运算符
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
+ | 加 | 10 + 5 | 15 |
- | 减 | 10 - 5 | 5 |
* | 乘 | 10 * 5 | 50 |
/ | 除 | 10 / 5 | 2 |
% | 取模(取余) | 10 % 3 | 1 |
++ | 后自增,没有前自增 | a=0; a++ | a=1 |
– | 后自减,没有前自减 | a=2; a– | a=1 |
示例如下:
package main
import "fmt"
func main() {
var a int = 10
var b int = 3
fmt.Printf("a + b = %d\n", a+b)
fmt.Printf("a - b = %d\n", a-b)
fmt.Printf("a * b = %d\n", a*b)
fmt.Printf("a / b = %d\n", a/b)
fmt.Printf("a %% b = %d\n", a%b)
a++
fmt.Printf("a++ = %d\n", a)
b--
fmt.Printf("b-- = %d\n", b)
}
打印效果如下:
注意
- 除法算数运算符除数不能为0
- 取余算术运算符除数不能为0
- Go语言中自增自减只有 a++ 或者 a-- 的形式
算术运算符案例一
输入半径,计算圆的面积和周长,并且打印出来(PI为3.14);
package main
import "fmt"
func main() {
const PI float64 = 3.14
num := 0.0
fmt.Println("请输入圆的半径:")
fmt.Scan(&num)
fmt.Printf("计算的结果如下:\n半径为 %f\n面积为 %f\n周长为 %f\n", num, PI*num*num, 2*PI*num)
}
打印效果如下:
算术运算符案例二
某学生三门课成绩为:语文 90 、数学 89 、英语 69 ,编程求总分和平均分;
package main
import "fmt"
func main() {
chinese := 90
mathematics := 89
english := 69
fmt.Printf("该学生语文成绩为%d,数学成绩为%d,英语成绩为%d\n", chinese, mathematics, english)
fmt.Printf("该学生总分为%.2f\n", float64(chinese+mathematics+english))
fmt.Printf("该学生平均分为%.2f\n", float64(chinese+mathematics+english)/3)
}
打印效果如下:
算术运算符案例三
问题1:某商店T恤(T-shirt)的价格为35元/件,裤子(trousers)的价格为120元/条。
小明在该店买了3件T恤和2条裤子并且打8.8折。请计算并显示小明应该付多少钱?
问题2:如上题中打完8.8折后出现小数商店为了结算方便,只收用户整数部分的钱,如本应收用户303.6,现在只收用户303元,应该如何做?
package main
import "fmt"
func main() {
tShirt := 35.0
trousers := 120.0
cost := 0.88
fmt.Println("T恤价值35元,裤子价值120元,折扣是8.8折")
fmt.Printf("小明买了3件T恤和2条裤子,一共花费:%.2f元\n", (3*tShirt+2*trousers)*cost)
fmt.Printf("商店只收取整数部分,即收取%d元\n", int((3*tShirt+2*trousers)*cost))
}
打印效果如下:
5.2.赋值运算符
关于赋值运算符前面我们已经使用过多次,赋值运算符 = ,
varint num=9;num=num+1; 这里的=号是赋值运算符,不是数学义意上的相等.
常见的赋值运算符如下,前面我们使用的=是普通赋值,+=,-=等我们称为“复合赋值运算符”
运算符 | 说明 | 示例 |
---|---|---|
= | 普通赋值 | c = a + b 将 a + b 表达式结果赋值给 c |
+= | 相加后再赋值 | c += a 等价于 c = c + a |
-= | 相减后再赋值 | c -= a 等价于 c = c - a |
*= | 相乘后再赋值 | c *= a 等价于 c = c * a |
/= | 相除后再赋值 | c /= a 等价于 c = c / a |
%= | 求余后再赋值 | c %= a 等价于 c = c % a |
5.3.关系运算符
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
== | 相等于 | 4 == 3 | false |
!= | 不等于 | 4 != 3 | true |
< | 小于 | 4 < 3 | false |
> | 大于 | 4 > 3 | true |
<= | 小于等于 | 4 <= 3 | false |
>= | 大于等于 | 4 >= 1 | true |
5.4.逻辑运算符
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
! | 非 | !a | 如果a为假,则!a为真; 如果a为真,则!a为假。 |
&& | 与 | a && b | 如果a和b都为真,则结果为真,否则为假。 |
|| | 或 | a || b | 如果a和b有一个为真,则结果为真,二者都为假时,结果为假。 |
逻辑运算符案例一
让用户输入老王的语文和数学成绩,输出以下判断是否正确,正确输出True,错误输出False;
老王的语文和数学成绩都大于90分;
语文和数学有一门是大于90分的;
package main
import "fmt"
func main() {
chinese := 0.0
mathematics := 0.0
fmt.Println("请输入老王的语文成绩:")
fmt.Scan(&chinese)
fmt.Println("请输入老王的数学成绩:")
fmt.Scan(&mathematics)
fmt.Printf("老王的语文和数学成绩都大于90分,结论:%t\n", chinese > 90 && mathematics > 90)
fmt.Printf("语文和数学有一门是大于90分的,结论:%t\n", chinese > 90 || mathematics > 90)
}
打印效果如下:
逻辑运算符案例二
让用户输入一个年份,如果是闰年,则输出 true,如果不是闰年,则输出 false;
package main
import "fmt"
func main() {
year := 0
fmt.Println("请你输入一个年份:")
fmt.Scan(&year)
fmt.Printf("这一年是闰年么?结论:%t\n", (year%400 == 0) || (year%4 == 0 && year%100 != 0))
}
打印效果如下: