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

 更新时间:2021年11月10日 10:19:19   作者:曲鸟  
循环语句为了简化程序中有规律的重复性操作,需要用到循环语句,和其他大多数编程语言一样,GO的循环语句有for循环,不同的是没有while循环,而循环控制语句可以改变循环语句的执行过程,下面给大家介绍下go循环语句和循环控制语句的相关知识,一起看看吧

一、循环语句

1. 普通循环

1)语法

for init; condition; post { }

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

2)举例

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

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时自相加的值:

package main

import "fmt"

func main() {
	count := 1
	for ; count < 10; {
		count += count
	}
	fmt.Println("count小于10时自相加的值为:",count)
}

也可以省略;号:

package main

import "fmt"

func main() {
	count := 1
	for count < 10{  //省略分号
		count += count
	}
	fmt.Println("1到10的数字之和为:",count)
}

执行结果

count小于10时自相加的值为

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

package main

import "fmt"

func main() {

	for { //省略condition
		fmt.Println("死循环")
	}
}

2. 循环嵌套

package main

import "fmt"

func main() {

	for { //省略condition
		fmt.Println("死循环")
	}
}

输出结果

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

3. range循环

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

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的时候则跳出循环:

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:

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

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

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 是跳过当次循环执行后面的循环,而非中断循环

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所在行的代码:

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循环语句和循环控制语句内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言学习教程之声明语法(译)

    Go语言学习教程之声明语法(译)

    Golang 就是类C的语法,下面这篇文章主要给大家介绍了关于Go语言学习教程之声明语法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-11-11
  • go 对象池化组件 bytebufferpool使用详解

    go 对象池化组件 bytebufferpool使用详解

    这篇文章主要为大家介绍了go 对象池化组件 bytebufferpool使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Golang使用channel实现数据汇总的方法详解

    Golang使用channel实现数据汇总的方法详解

    这篇文章主要为大家详细介绍了在并发编程中数据汇总的问题,并探讨了在并发环境下使用互斥锁和通道两种方式来保证数据安全性的方法,需要的可以参考一下
    2023-05-05
  • 关于golang中平行赋值浅析

    关于golang中平行赋值浅析

    这篇文章主要给大家介绍了关于golang中平行赋值的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用golang具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • Golang 并发下的问题定位及解决方案

    Golang 并发下的问题定位及解决方案

    由于 gin-swagger 是并发执行的, 输出的日志本身是错位,这就导致无法定义是哪一个结构体缺少 tag 导致的,这篇文章主要介绍了Golang 并发下的问题定位及解决方案,需要的朋友可以参考下
    2022-03-03
  • Go语言实现选择法排序实例

    Go语言实现选择法排序实例

    这篇文章主要介绍了Go语言实现选择法排序的方法,实例分析了选择法排序的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • Golang slice切片操作之切片的追加、删除、插入等

    Golang slice切片操作之切片的追加、删除、插入等

    这篇文章主要介绍了Golang slice切片操作之切片的追加、删除、插入等,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • go build失败报方法undefined的解决过程

    go build失败报方法undefined的解决过程

    go build命令用于编译我们指定的源码文件或代码包以及它们的依赖包,下面这篇文章主要给大家介绍了关于go build失败报方法undefined的解决过程,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • 浅析Golang中的内存逃逸

    浅析Golang中的内存逃逸

    内存逃逸分析是go的编译器在编译期间,根据变量的类型和作用域,确定变量是堆上还是栈上。本文将通过示例浅析一下Golang中的内存逃逸,需要的可以了解一下
    2022-10-10
  • Go语言map字典用法实例分析

    Go语言map字典用法实例分析

    这篇文章主要介绍了Go语言map字典用法,实例分析了map字典的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02

最新评论