本篇前瞻
好的,现在你已经来到一个新的小结,在这里你将学习到go语言的重要内容,习得go 25个关键字中的12个:var, const, if, else, switch, case, default, fallthrough, for, break, goto, continue,即在顺序结构学习var,const,在分支结构中学习if, else, switch, case, default, fallthrough,在循环结构中学习for, break, goto, continue。另外你最好注册一个Leetcode账号.
Leetcode习题9
让我们再来看下这个例子,这个是一个比较好的例子,里面包含了顺序,分支以及循环的所有控制结构
题目描述
给你一个整数 x
,如果 x
是一个回文整数,返回 true
;否则,返回 false
。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
代码编写
func isPalindrome(x int) bool {
if (x < 0) { //分支结构
return false
}
x64 := x //顺序结构
px64 := 0
for x64 != 0 { //循环结构
px64 = px64*10 + x64%10 // 顺序结构
x64 /= 10
}
return px64 == x
}
你在这个道题目中能看到所有的控制结构:顺序结构,分支结构,循环机构
控制结构
顺序结构(Sequence)
声明和赋值
在顺序结构中声明和赋值是很重要的
var可以声明一个变量,而const则声明一个常量
package main
import "fmt"
func main() {
var i1 int //声明变量,默认值为0
var i2 int = 1 //声明变量,初始化为1
i3 := 2 //这是最常用的声明和初始化手段
fmt.Println(i1, i2, i3)
i4 := i2 + i3 //使用运算表达式赋值
i3 *= i4 //使用运算表达式赋值
fmt.Println(i3, i4)
const ci1 int = 13 //声明常量,无法
fmt.Println(ci1)
x, y, z := 100, 101, 102 //多返回值
fmt.Println(x, y, z) //打印结果
}
输出:
0 1 2
6 3
13
100 101 102
这里仅仅举例了整形int的声明
多返回值赋值
x,y,z := 0,1,2
go语言允许这样多返回值赋值赋值方式,再挖个坑,原因会在介绍函数时说明一下。
运算符
算术运算符
++ | -- | |||
---|---|---|---|---|
自增1 | 自减1 | |||
+= | -= | *= | /= | %= |
自增 | 自减 | 自乘 | 自除 | 自模,取余 |
+ | - | * | / | % |
加法 | 减法 | 乘法 | 除法 | 模,取余 |
注意: 例如如3/2 在整型中是整除即3/2=1,在浮点型是3.0/2.0=1.5,模运算智能用于整数
位运算符
<< | >> | & | | | ^ |
---|---|---|---|---|
左移 | 右移 | 与 | 或 | 亦或 |
<<= | >>= | &= | |= | ^= |
自左移 | 自右移 | 自与 | 自或 | 自亦或 |
位运算符几乎我们这篇实用的编程用不到,但是这个概念也很重要,计算机底层事实上是这样工作的,这里在挖个坑,后面会介绍位运算的相关leetcode题目,你会看到它的威力。
逻辑运算
&& | || | == | != | ! |
---|---|---|---|---|
与 | 或 | 相等 | 不等于 | 非 |
>= | <= | > | < | |
大于等于 | 小于等于 | 大于 | 小于 |
这些会在分支语句中大放异彩。
分支结构
if 语句
if 语句有if,if-else以及if-else if-else结构,如下所示:
package main
import "fmt"
func main() {
var input int
fmt.Printf("请输入分数:")
fmt.Scanf("%d", &input)
if input < 60 { //if
fmt.Println("1.不合格")
}
if input < 60 { //if-else
fmt.Println("2.不合格")
} else{
fmt.Println("2.合格")
}
if input < 60 {//if-else if-else
fmt.Println("3.不合格")
} else if input < 70 {
fmt.Println("3.合格")
} else if input < 85 {
fmt.Println("3.良好")
} else {
fmt.Println("3.优秀")
}
}
结果如下:
请输入分数:59
1.不合格
2.不合格
3.不合格
switch 语句
事实上switch 语句比if语句更为强大,在有多个分支时更为符合go语言的风格,完整代码如下:
package main
import "fmt"
func main() {
var i int
fmt.Printf("请输入分数:")
fmt.Scanf("%d\n", &i)
switch {
case i < 60: //单个逻辑表达式
fmt.Println("不合格")
case i < 70:
fmt.Println("合格")
case i < 85:
fmt.Println("良好")
default:
fmt.Println("优秀")
}
var c byte
fmt.Printf("请输入等级:")
fmt.Scanf("%c\n", &c)
switch c {
case 'E', 'e': //可以有多个选择
fmt.Println("1.不合格")
case 'D', 'd':
fmt.Println("1.基本合格")
case 'C', 'c':
fmt.Println("1.合格")
case 'B', 'b':
fmt.Println("1.良好")
case 'A', 'a