脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - Golang的循环语句和循环控制语句详解

Golang的循环语句和循环控制语句详解

2021-12-02 12:02曲鸟 Golang

循环语句为了简化程序中有规律的重复性操作,需要用到循环语句,和其他大多数编程语言一样,GO的循环语句有for循环,不同的是没有while循环,而循环控制语句可以改变循环语句的执行过程,下面给大家介绍下go循环语句和循环

一、循环语句

1. 普通循环

1)语法

for init; condition; post { }

  • init(可选):给控制变量赋初值;
  • condition(可选):控制条件(不填的时候等于while True);
  • post(可选):控制变量增量或减量;

2)举例

1.求1到10的数字之和。

?
1
2
3
4
5
6
7
8
9
10
11
package main
 
import "fmt"
 
func main() {
    count := 0
    for i := 0; i <= 10; i++ {
        count += i
    }
    fmt.Println("1到10的数字之和为:",count)
}

执行结果

1到10的数字之和为: 55

2.省略init和post:计算count小于10时自相加的值:

?
1
2
3
4
5
6
7
8
9
10
11
package main
 
import "fmt"
 
func main() {
    count := 1
    for ; count < 10; {
        count += count
    }
    fmt.Println("count小于10时自相加的值为:",count)
}

也可以省略;号:

?
1
2
3
4
5
6
7
8
9
10
11
package main
 
import "fmt"
 
func main() {
    count := 1
    for count < 10{  //省略分号
        count += count
    }
    fmt.Println("1到10的数字之和为:",count)
}

执行结果

count小于10时自相加的值为

3.Golang中没有while循环,可以通过省略condition来实现:

?
1
2
3
4
5
6
7
8
9
10
package main
 
import "fmt"
 
func main() {
 
    for { //省略condition
        fmt.Println("死循环")
    }
}

2. 循环嵌套

?
1
2
3
4
5
6
7
8
9
10
package main
 
import "fmt"
 
func main() {
 
    for { //省略condition
        fmt.Println("死循环")
    }
}

输出结果

(1到10的数字之和)x10: 550

3. range循环

用于对字符串、数组、切片等进行迭代输出元素:

?
1
2
3
4
5
6
7
8
9
10
package main
 
import "fmt"
 
func main() {
    strArray := []string{"a", "b","c"} //字符串数组
    for i,v := range strArray {
        fmt.Println(fmt.Sprintf("下标为:%d 值为:%s", i,v))
    }
}

输出结果

下标为:0 值为:a
下标为:1 值为:b
下标为:2 值为:c

二、循环控制语句

1.Break-中断(跳出)循环

1)中断(跳出)循环

写一个死循环,变量a会一直加1,当a的值大于3的时候则跳出循环:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main
 
import "fmt"
 
func main() {
    a := 1
    for  {
        a++
        fmt.Printf("a 的值为 : %d\n", a)
        if a > 3 {
            /* 使用 break 语句跳出循环 */
            fmt.Printf("跳出循环")
            break
        }
    }
}

输出结果

a 的值为 : 2
a 的值为 : 3
a 的值为 : 4
跳出循环

2)指定想中断(跳出)的循环(嵌套循环中使用)

使用标号,可以指定想跳出的循环。

下面是未使用标记,普通break中断循环,只会中断当前层循环,不会中断外层,外层打印的值始终为11:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
package main
 
import "fmt"
 
func main() {
    for i := 1; i <= 2; i++ {
        fmt.Printf("外层循环i: %d\n", i)
        for j := 11; j <= 12; j++ {
            fmt.Printf("内层循环j: %d\n", j)
            break  //不使用标记,则只会中断该层循环,不会中断外层循环
        }
    }
}

输出结果

外层循环i: 1
内层循环j: 11
外层循环i: 2
内层循环j: 11

下面是使用标记,指定中断外层循环,等于只循环执行了一次:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main
 
import "fmt"
 
func main() {
re:
    for i := 1; i <= 2; i++ {
        fmt.Printf("外层循环i: %d\n", i)
        for j := 11; j <= 12; j++ {
            fmt.Printf("内层循环j: %d\n", j)
            break re //使用标记,中断外层循环
        }
    }
}

输出结果

外层循环i: 1
内层循环j: 11

2.Continue-跳过当次循环

continue 是跳过当次循环执行后面的循环,而非中断循环

?
1
2
3
4
5
6
7
8
9
10
11
12
13
package main
 
import "fmt"
 
func main() {
    for a := 1; a < 5; a++ {
        if a == 3 { //a=3时执行continue跳过
            continue
        }
        //a=3时不会执行打印操作
        fmt.Printf("a 的值为 : %d\n", a)
    }
}

执行结果

a 的值为 : 1
a 的值为 : 2
a 的值为 : 4

在循环嵌套时,continue也可以指定跳过的循环,用法与break一样

3.goto-条件转移

goto 可以直接转移到指定代码处进行执行。

下面的代码,当a=3时,会跳出for循环,直接执行LOOP所在行的代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main
 
import "fmt"
 
func main() {
    for a := 1; a < 5; a++ {
        if a == 3 { //a等于3;执行goto跳出
            goto LOOP
        }
        //a=3时不会执行打印操作
        fmt.Printf("a 的值为 : %d\n", a)
    }
    LOOP:fmt.Printf("a等于3;执行goto跳出!")
}

执行结果

a 的值为 : 1
a 的值为 : 2
a等于3;执行goto跳出!

不建议使用goto,容易造成代码结构混乱

到此这篇关于Golang的循环语句和循环控制语句的文章就介绍到这了,更多相关go循环语句和循环控制语句内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/momoda118/article/details/121201795

延伸 · 阅读

精彩推荐
  • GolangGolang通脉之数据类型详情

    Golang通脉之数据类型详情

    这篇文章主要介绍了Golang通脉之数据类型,在编程语言中标识符就是定义的具有某种意义的词,比如变量名、常量名、函数名等等,Go语言中标识符允许由...

    4272021-11-24
  • Golanggo日志系统logrus显示文件和行号的操作

    go日志系统logrus显示文件和行号的操作

    这篇文章主要介绍了go日志系统logrus显示文件和行号的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    SmallQinYan12302021-02-02
  • Golanggolang的httpserver优雅重启方法详解

    golang的httpserver优雅重启方法详解

    这篇文章主要给大家介绍了关于golang的httpserver优雅重启的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    helight2992020-05-14
  • GolangGolang中Bit数组的实现方式

    Golang中Bit数组的实现方式

    这篇文章主要介绍了Golang中Bit数组的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    天易独尊11682021-06-09
  • Golanggo语言制作端口扫描器

    go语言制作端口扫描器

    本文给大家分享的是使用go语言编写的TCP端口扫描器,可以选择IP范围,扫描的端口,以及多线程,有需要的小伙伴可以参考下。 ...

    脚本之家3642020-04-25
  • Golanggolang 通过ssh代理连接mysql的操作

    golang 通过ssh代理连接mysql的操作

    这篇文章主要介绍了golang 通过ssh代理连接mysql的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    a165861639710342021-03-08
  • Golanggolang json.Marshal 特殊html字符被转义的解决方法

    golang json.Marshal 特殊html字符被转义的解决方法

    今天小编就为大家分享一篇golang json.Marshal 特殊html字符被转义的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    李浩的life12792020-05-27
  • Golanggolang如何使用struct的tag属性的详细介绍

    golang如何使用struct的tag属性的详细介绍

    这篇文章主要介绍了golang如何使用struct的tag属性的详细介绍,从例子说起,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看...

    Go语言中文网11352020-05-21