Golang
主页 > 脚本 > Golang >

Golang流程控制语句的具体使用

2024-05-11 | 佚名 | 点击:

顺序控制

顺序控制

默认情况下,Go代码执行顺序是按照从上到下依次执行的,这种按照顺序执行的代码就叫做顺序语句。如下:

1

2

3

4

5

6

7

8

9

10

package main

 

import "fmt"

 

func main() {

    // 顺序控制

    fmt.Println("statement 1...")

    fmt.Println("statement 2...")

    fmt.Println("statement 3...")

}

分支控制

if语句

if语句

Go中if语句的基本语法如下:

在这里插入图片描述

使用案例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

package main

 

import "fmt"

 

func main() {

    // if语句

    var num1, num2 int = 10, 20

    if num1 > num2 {

        fmt.Println("num1 > num2")

    } else if num1 < num2 {

        fmt.Println("num1 < num2")

    } else {

        fmt.Println("num1 = num2")

    }

}

说明一下:

if后声明变量

if语句支持在if后声明一个变量,并以分号结束,然后在分号后面再给出条件表达式。如下:

1

2

3

4

5

6

7

8

9

10

11

package main

 

import "fmt"

 

func main() {

    // if后声明变量

    var num = 10

    if base := 20; num < base {

        fmt.Println("num < base")

    }

}

注意: 在if后声明的变量仅在if语句中有效。

switch语句

switch语句

Go中switch语句的基本语法如下:

在这里插入图片描述

使用案例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

package main

 

import "fmt"

 

func main() {

    // switch语句

    var year, month int = 2024, 4

    switch month {

    case 1, 3, 5, 7, 8, 10, 12:

        fmt.Println("这个月有31天")

    case 4, 6, 9, 11:

        fmt.Println("这个月有30天")

    case 2:

        day := 28

        if (year%4 == 0 && year%100 != 0) || (year%400 == 0) {

            day++

        }

        fmt.Printf("这个月有%d天\n", day)

    default:

        fmt.Println("无效月份!")

    }

}

说明一下:

switch后声明变量

switch语句支持在switch后声明一个变量,并以分号结束,然后在分号后面再给出表达式。如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

package main

 

import "fmt"

 

func main() {

    // switch后声明变量

    switch year, month := 2024, 4; month {

    case 1, 3, 5, 7, 8, 10, 12:

        fmt.Println("这个月有31天")

    case 4, 6, 9, 11:

        fmt.Println("这个月有30天")

    case 2:

        day := 28

        if (year%4 == 0 && year%100 != 0) || (year%400 == 0) {

            day++

        }

        fmt.Printf("这个月有%d天\n", day)

    default:

        fmt.Println("无效月份!")

    }

}

注意: 在switch后声明的变量仅在switch语句中有效。

switch穿透

在执行完对应的case语句的代码块后,程序会直接退出switch控制,如果希望程序继续执行下一个case语句的代码块,可以在代码块的最后通过fallthough关键字实现switch穿透。如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

package main

 

import "fmt"

 

func main() {

    // switch穿透

    var num int = 2

    switch num {

    case 1:

        fmt.Println("case 1 block...")

    case 2:

        fmt.Println("case 2 block...")

        fallthrough // 继续执行下一个case的代码块

    case 3:

        fmt.Println("case 3 block...")

    default:

        fmt.Println("default block...")

    }

}

注意: switch穿透默认只会穿透一层,如果希望执行下面更多case的代码块,需要再次穿透。

Type Switch

switch语句可以用于判断某个interface变量实际指向的变量类型,然后根据不同的类型执行相应的代码逻辑。如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

package main

 

import "fmt"

 

func main() {

    // Type Switch

    var num int = 10

    var x interface{} = num

    switch t := x.(type) {

    case int:

        fmt.Println("int类型")

    case float64:

        fmt.Println("float64类型")

    case string:

        fmt.Println("string类型")

    default:

        fmt.Printf("未处理类型: %T\n", t)

    }

}

说明一下:

无表达式的switch

switch语句后可以不带表达式,这时在case后放条件表达式可以达到if语句的效果。如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

package main

 

import "fmt"

 

func main() {

    // 无表达式的switch

    var num1, num2 int = 10, 20

    switch {

    case num1 > num2:

        fmt.Println("num1 > num2")

    case num1 < num2:

        fmt.Println("num1 < num2")

    default:

        fmt.Println("num1 = num2")

    }

}

说明一下:

循环控制

for循环语句

for循环语句

Go中for循环语句的基本语法如下:

在这里插入图片描述

使用案例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

package main

 

import (

    "fmt"

)

 

func main() {

    // for循环语句

    for i := 1; i &lt;= 10; i++ {

        fmt.Printf("%d ", i)

    }

    fmt.Println()

}

说明一下:

for循环的其他用法

在使用for循环语句时,可以只在for后指明循环条件,而将循环变量的初始化和循环变量的迭代放在其他位置。如下:

在这里插入图片描述

使用案例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

package main

 

import (

    "fmt"

)

 

func main() {

    // for循环语句

    i := 1

    for i &lt;= 10 {

        fmt.Printf("%d ", i)

        i++

    }

    fmt.Println()

}

在使用for循环语句时,以for{}或for ; ; {}表示无限循环,通常需要配合break语句使用。如下:

在这里插入图片描述

使用案例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

package main

 

import (

    "fmt"

)

 

func main() {

    // for循环语句

    for {

        fmt.Println("这是一个死循环...")

        time.Sleep(time.Second)

    }

}

说明一下:

for range循环

Go中的for range循环,可以方便的对string、数组、切片、map等数据类型中的元素进行遍历。如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

package main

 

import (

    "fmt"

)

 

func main() {

    // for range循环

    var s string = "Hello 世界"

    for index, value := range s {

        fmt.Printf("s[%d] = %c\n", index, value)

    }

}

在使用for range遍历string时,它会按照UTF-8编码格式解析字符串,并以Unicode字符作为迭代的单位,每次迭代都会返回字符串中的一个Unicode字符(rune)和对应的索引,无论是单字节的ASCII字符还是多字节的汉字,都会被正确地解析并返回。上述程序的运行结果如下:

在这里插入图片描述

说明一下:

跳转控制

break语句

break语句

Go中break语句可以用于跳出for循环语句或switch语句。如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

package main

 

import "fmt"

 

func main() {

    // break语句

    for i := 0; i &lt; 10; i++ {

        if i == 6 {

            break

        }

        fmt.Printf("%d ", i)

    }

    fmt.Println()

}

在多层循环嵌套语句中,break默认只会跳出最近的for循环,如果希望跳出更外层的for循环,可以通过标签进行指明。如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

package main

 

import "fmt"

 

func main() {

    // break标签

label:

    for i := 0; i &lt; 10; i++ {

        for j := 0; j &lt; 10; j++ {

            for k := 0; k &lt; 10; k++ {

                if i == 2 &amp;&amp; j == 3 &amp;&amp; k == 4 {

                    break label

                }

                fmt.Printf("i = %d, j = %d, k = %d\n", i, j, k)

            }

        }

    }

}

说明一下:

continue语句

continue语句

Go中continue语句用于for循环中,可以停止当前的迭代并进入下一次迭代。如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

package main

 

import "fmt"

 

func main() {

    // continue语句

    for i := 0; i &lt; 10; i++ {

        if i == 6 {

            continue

        }

        fmt.Printf("%d ", i)

    }

    fmt.Println()

}

在多层循环嵌套语句中,continue默认只会作用到最近的for循环,如果希望作用到更外层的for循环,可以通过标签进行指明。如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

package main

 

import "fmt"

 

func main() {

    // continue标签

label:

    for i := 0; i &lt; 10; i++ {

        for j := 0; j &lt; 10; j++ {

            for k := 0; k &lt; 10; k++ {

                if i == 2 &amp;&amp; j == 3 &amp;&amp; k == 4 {

                    continue label

                }

                fmt.Printf("i = %d, j = %d, k = %d\n", i, j, k)

            }

        }

    }

}

说明一下:

goto语句

goto语句

Go中的goto语句用于无条件地跳转到程序中指定标签的位置。如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

package main

 

import "fmt"

 

func main() {

    // goto语句

    for i := 0; i &lt; 10; i++ {

        for j := 0; j &lt; 10; j++ {

            for k := 0; k &lt; 10; k++ {

                if i == 2 &amp;&amp; j == 3 &amp;&amp; k == 4 {

                    goto label

                }

                fmt.Printf("i = %d, j = %d, k = %d\n", i, j, k)

            }

        }

    }

label:

    fmt.Println("other code...")

}

说明一下:

return语句

return语句

Go中的return语句在方法或函数中使用,表示跳出所在的方法或函数。如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

package main

 

import "fmt"

 

func main() {

    // return语句

    for i := 0; i &lt; 10; i++ {

        if i == 6 {

            return

        }

        fmt.Printf("%d ", i)

    }

}

说明一下:

原文链接:
相关文章
最新更新