3.2.4Golang的程序结构

总目录:https://blog.csdn.net/qq_41106844/article/details/105553392

Golang - 子目录:https://blog.csdn.net/qq_41106844/article/details/105553366

 

流程控制

Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码、降低重复代码而生的结构,属于扩展类的流程控制。

if

判断分支语句。
语法:

if 表达式1 {
    语句块1
} else if 表达式2 {
    语句块2
}else if 表达式...{
    语句块...
}else if 表达式n{
    语句块n
} else{
    语句块n+1
}

举个例子:

package main

import "fmt"

func main()  {
    age := 19
    if age>=50 {
        fmt.Println("人到中年不得已")
    }else if age >=18{
        fmt.Println("你成年了")
    }else{ 
        fmt.Println("该上网课了")
    }
}

现在再换个写法:

package main

import "fmt"

func main()  {
    if age := 19;age>=50 {
        fmt.Println("人到中年不得已")
    }else if age >=18{
        fmt.Println("你成年了")
    }else{ 
        fmt.Println("该上网课了")
    }
}

第二种写法优于第一种写法的地方在于,age不再是一个局部变量,而是一个临时变量,会随着if判断的执行完成而自动销毁。

for

条件表达式返回true时循环体不停地进行循环,直到条件表达式返回false时自动退出循环。
语法:

for 初始语句;条件表达式;结束语句{
    循环体语句
}

例子:

package main

import "fmt"

func main() {
    // 例子
    for i := 0; i < 3; i++ {
        fmt.Println(i)
    }
    // 同时,初始语句是可以省略的
    i := 0
    for ; i < 3; i++ {
        fmt.Println(i)
    }
    // 还有一种类似于while循环的写法
    j := 0
    for j < 3 {
        fmt.Println(j)
        j++
    }
}

初次之外,还有一种无限循环语句,类似于Python的while True

for {
    循环体语句
}

for循环可以通过break、goto、return、panic语句强制退出循环。

补充点:
Go语言中可以使用for range遍历数组、切片、字符串、map 及通道(channel)。 通过for range遍历的返回值有以下规律:

数组、切片、字符串返回索引和值。
map返回键和值。
通道(channel)只返回通道内的值。

switch

使用switch语句可方便地对大量的值进行条件判断。
语法:

switch 表达式{
  case 结果1:
      语句块1
  case 结果...:
      语句块...
  case 结果n:
      语句块n
  default:
      语句块n+1
}

一个switch只能有一个default,但是一个case可以由多个结果。

package main

import "fmt"

func main() {
    switch n := 7; n {
    case 1, 3, 5, 7, 9:
        fmt.Println("奇数")
    case 2, 4, 6, 8:
        fmt.Println("偶数")
    default:
        fmt.Println(n)
    }
}

同时他也可以是表达式。

package main

import "fmt"

func main() {
    age := 30
    switch {
    case age < 25:
        fmt.Println("好好学习吧")
    case age > 25 && age < 35:
        fmt.Println("好好工作吧")
    case age > 60:
        fmt.Println("好好享受吧")
    default:
        fmt.Println("活着真好")
    }
}

go语言为了兼容c语言的写法,也有一个 fallthrough,他可以执行满足条件的case的同时执行下一个case。

package main

import "fmt"

func main() {
    switch n := 7; n {
    case 1, 3, 5, 7, 9:
        fmt.Println("奇数")
        fallthrough
    case 2, 4, 6, 8:
        fmt.Println("偶数")
    default:
        fmt.Println(n)
    }
}
----------
奇数
偶数

goto

goto语句通过标签进行代码间的无条件跳转。goto语句可以在快速跳出循环、避免重复退出上有一定的帮助。Go语言中使用goto语句能简化一些代码的实现过程。
语法:

goto 退出标签


退出标签:
    语句

例子:

package main

import "fmt"

func main() {
    for i := 0; i < 10; i++ {
        for j := 0; j < 10; j++ {
            if j == 2 {
                // 设置退出标签
                goto breakTag
            }
            fmt.Printf("%v-%v\n", i, j)
        }
    }
    return
    // 标签
    breakTag:
        fmt.Println("结束for循环")
    
}
----------
0-0
0-1
结束for循环

break

break语句可以结束for、switch和select的代码块。
例子:

package main

import "fmt"

func main() {
    for i := 0; i < 10; i++ {
        for j := 0; j < 10; j++ {
            if j == 2 {
                break 
            }
            fmt.Printf("%v-%v\n", i, j)
        }
    }
    fmt.Println("...")
}
----------
0-0
0-1
1-0
1-1
2-0
2-1
3-0
3-1
4-0
4-1
5-0
5-1
6-0
6-1
7-0
7-1
8-0
8-1
9-0
9-1
...

但是,go语言的break有一个特殊的地方:
break语句还可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的for、switch和 select的代码块上。

package main

import "fmt"

func main() {
    BREAKDEMO1:
        for i := 0; i < 10; i++ {
            for j := 0; j < 10; j++ {
                if j == 2 {
                    break BREAKDEMO1
                }
                fmt.Printf("%v-%v\n", i, j)
            }
        }
        fmt.Println("...")
}
----------
0-0
0-1
...

continue

continue语句可以结束当前循环,开始下一次的循环迭代过程,仅限在for循环内使用。

在 continue语句后添加标签时,表示开始标签对应的循环。
例子:

package main

import "fmt"

func main() {
forloop1:
    for i := 0; i < 5; i++ {
        // forloop2:
        for j := 0; j < 5; j++ {
            if i == 2 && j == 2 {
                continue forloop1
            }
            fmt.Printf("%v-%v\n", i, j)
        }
    }
}

----------
0-0
0-1
0-2
0-3
0-4
1-0
1-1
1-2
1-3
1-4
2-0
2-1
3-0
3-1
3-2
3-3
3-4
4-0
4-1
4-2
4-3
4-4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒 暄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值