判断语句

if

中断式(卫语句)

go
var a int = 10
if a > 5 {
fmt.Println("a大于5")
return
}

switch

和 js 差不多

go
switch a {
case 1:
fmt.Println("a等于1")
case 2:
fmt.Println("a等于2")
default:
fmt.Println("a不等于1和2")
}

满足其中一个条件就不会继续判断了

如果要继续往下走,使用fallthrough关键字

go
b := 23
switch {
case b <= 10:
fmt.Println("b小于等于10")
case b > 10:
fmt.Println("b大于10小于等于20")
fallthrough
case b > 20:
fmt.Println("b大于20小于等于30")
default:
fmt.Println("b大于20")
}

逻辑符

  • &&
  • ||
  • !
go
// 逻辑符
if a > 5 && a < 10 {
fmt.Println("a大于5小于10")
}
if a > 5 || a < 10 {
fmt.Println("a大于5小于10")
}

逻辑短路

&&第一个条件如果是 false,后面的条件就不会走了

||第一个条件如果是 true,后面的条件就不会走了

循环语句

for

传统版本

也和 js 差不多

go
var sum int
for i := 1; i <= 100; i++ {
sum += i
}
fmt.Println(sum)

两种死循环

go
for {
fmt.Println(time.Now())
time.Sleep(2 * time.Second)
}
go
for true {
fmt.Println(time.Now())
time.Sleep(2 * time.Second)
}

Go 没有 while 关键字

可以通过 for 变化而来

go
var sum int
var i int = 1
for i <= 100 {
sum += i
i++
}

do-while 模式

go
for {
sum += i
i++
if i == 101 {
break
}
}

遍历切片

传统方式

go
var nameList []string = []string{"张三", "李四", "王五"}
// 传统方式
for i := 0; i < len(nameList); i++ {
fmt.Println(nameList[i])
}

Go 方式,和 py 类似

go
for index, item := range nameList {
fmt.Println(index, item)
}
0 张三
1 李四
2 王五

遍历 map

go
var nameMap = map[string]string{"name1": "张三", "name2": "李四"}
for key, value := range nameMap {
fmt.Println(key, value)
}
name1 张三
name2 李四

练习

九九乘法表

go
for i := 1; i <= 9; i++ {
for j := 1; j <= i; j++ {
fmt.Printf("%d*%d=%d\t", i, j, i*j)
}
fmt.Println()
}

break 和 continue

和 py 类似,continue 跳出本次循环,break 跳出循环

go
for i := 1; i <= 10; i++ {
if i%2 == 0 {
continue
}
fmt.Println(i)
}
1
3
5
7
9
go
for i := 1; i <= 10; i++ {
if i%2 == 0 {
break
}
fmt.Println(i)
}
1