1. if 语句

1.1. if 语句的格式

  1. if condition {
  2. coding
  3. } else if condition {
  4. coding
  5. } else {
  6. coding
  7. }

1.2. 案例

  1. package main
  2. import "fmt"
  3. import "strings"
  4. func main() {
  5. if sal := 15000; sal >= 20000 { // 此时sal 为if 语句块中的局部变量
  6. fmt.Println("核心员工")
  7. } else if sal >= 15000 {
  8. fmt.Println("骨干员工")
  9. } else {
  10. fmt.Println("非核心员工")
  11. }
  12. id := "wb2020030501"
  13. if strings.HasPrefix(id, "wb") {
  14. fmt.Print("外包员工")
  15. }
  16. }
  1. e:\OneDrive\Projects\Go\src\gitee.com\studygo\day01\04-condition>go run main.go
  2. 骨干员工
  3. 外包员工

2. for循环

2.1. for语句格式

  1. 1. 循环式
  2. # 这种模式下,初始值可以放到for循环外,结束语句也可以放入循环体中
  3. for 初始值; 条件; 结束语句 {
  4. 循环体
  5. }
  6. 2. 迭代取值
  7. # 这种循环下,可以遍历字符串、数组等
  8. for a, b := range s {
  9. 循环体
  10. }
  11. 3. 无限循环
  12. for {
  13. 循环体
  14. }

2.2. 案例

  1. package main
  2. import "fmt"
  3. func main() {
  4. for i := 1; i <= 9; i++ {
  5. for j := 1; j <= i; j++ {
  6. fmt.Printf("%dx%d=%d\t", j, i, j*i)
  7. }
  8. fmt.Println()
  9. }
  10. }
  1. e:\OneDrive\Projects\Go\src\gitee.com\studygo\day01\05-for>go run main.go
  2. 1x1=1
  3. 1x2=2 2x2=4
  4. 1x3=3 2x3=6 3x3=9
  5. 1x4=4 2x4=8 3x4=12 4x4=16
  6. 1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
  7. 1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
  8. 1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
  9. 1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
  10. 1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81

3. switch case

3.1. 几种场景

  1. 1. 判断一个变量的值是否等于某个值,其中name可以在switch之外赋值,也可以在switch内,如switch name := 1;name {}
  2. switch name {
  3. case v1:
  4. 代码块
  5. case v2:
  6. 代码块
  7. case v3:
  8. 代码块
  9. default: // 可选
  10. 默认代码块
  11. }
  12. 2. 上述代码块的case可以使用一个值,也可以使用多个值
  13. switch name {
  14. case v1,v2,v3 :
  15. 代码块
  16. case v4:
  17. 代码块
  18. case v5:
  19. 代码块
  20. default:
  21. 默认代码块
  22. }
  23. 3. 判断对象放到case内部
  24. switch {
  25. case name > v1:
  26. 代码块
  27. case name > v2:
  28. 代码块
  29. case name > v3:
  30. 代码块
  31. default:
  32. 默认代码块
  33. }

3.2. 案例

3.2.1. 案例一

  1. package main
  2. import "fmt"
  3. func main() {
  4. inputArg := "stop"
  5. switch inputArg {
  6. case "start":
  7. fmt.Println("systemctl start httpd")
  8. case "stop":
  9. fmt.Println("systemctl stop httpd")
  10. case "restart":
  11. fmt.Println("systemctl restart httpd")
  12. }
  13. }

3.2.2. 案例二

  1. package main
  2. import "fmt"
  3. func main() {
  4. switch serviceName := "MySQL"; serviceName {
  5. case "httpd", "nginx":
  6. fmt.Println("web service")
  7. case "docker", "kubernetes":
  8. fmt.Println("container service")
  9. case "Keepalived":
  10. fmt.Println("High ")
  11. default:
  12. fmt.Println("others service")
  13. }
  14. }

3.2.3. 案例三

  1. package main
  2. import "fmt"
  3. func main() {
  4. // 这段代码只是示例,没有实际意义
  5. switch port := 677724; {
  6. case port == 22:
  7. fmt.Println("sshd service")
  8. case port == 80 || port == 8080:
  9. fmt.Println("Web service")
  10. case port > 32768 && port < 65535:
  11. fmt.Println("others service")
  12. case port > 65535:
  13. fmt.Println("the port maybe error!")
  14. }
  15. }

4. 跳出循环

4.1. break/continue

  1. package main
  2. import "fmt"
  3. // 跳出循环: break/continue
  4. func main() {
  5. var name string = "abcdef"
  6. for _, s := range name {
  7. if s == 'c' {
  8. continue
  9. } else if s == 'e' {
  10. break
  11. }
  12. fmt.Printf("%c\t", s)
  13. }
  14. }
  1. package main
  2. import "fmt"
  3. // 跳出多层循环
  4. func main() {
  5. var flag bool
  6. for i := 1; i <= 9; i++ {
  7. for j := 1; j <= i; j++ {
  8. fmt.Printf("%d x %d = %d\t", j, i, j*i)
  9. if j > 5 {
  10. flag = true
  11. break
  12. }
  13. }
  14. if flag {
  15. break
  16. }
  17. fmt.Println()
  18. }
  19. }

4.2. goto

goto语句是先定义一个label,这个标签内部写跳出循环时执行的语句,在循环体中当满足特定条件时,立刻跳到定义好的label代码块 , 这种在嵌套循环中非常好用。

  1. package main
  2. import "fmt"
  3. // 对上述嵌套循环代码的简化
  4. func main() {
  5. for i := 1; i <= 9; i++ {
  6. for j := 1; j <= i; j++ {
  7. fmt.Printf("%d x %d = %d\t", j, i, j*i)
  8. if j > 5 {
  9. goto BreakLoop
  10. }
  11. }
  12. fmt.Println()
  13. }
  14. BreakLoop:
  15. fmt.Println()
  16. }