go语言循环语句

简介: go语言循环语句

今天说一下go语言的循环条件



(一)重点放在前面说


  • Go语言没有while循环条件,只有for循环,但是for循环可以充当while循环




(二)Go语言for循环语法


①一般for循环


语法:
  for 赋值语句;循环条件;循环变量{}


打印99乘法表(与c语言,c++一样)
  mystr := "%d*%d=%d\t"
  for i := 1; i < 10; i++ {
    for j := 1; j <= i; j++ {
      tempstr := fmt.Sprintf(mystr, j, i, j*i)//这一句时将数据格式化写入mystr内
      fmt.Print(tempstr)//打印格式化好的字符串
    }
    fmt.Println()
  }


②可以充当while循环的for循环


语法:
  for 循环条件{}


打印99乘法表(与while循环没两样)
  mystr := "%d*%d=%d\t"
  j, i := 1, 1
  for i < 10 {
    j = 1
    for j <= i {
      tempstr := fmt.Sprintf(mystr, j, i, j*i)//这一句时将数据格式化写入mystr内
      fmt.Print(tempstr)//打印格式化好的字符串
      j++
    }
    fmt.Println()
    i++
  }


③对可迭代对象进行循环遍历


语法:
  for key,value :=range 可迭代对象{}
该方法在以后最为常用,其中key,value可以使用 _ 空白字符进行忽略,只得到键或值


打印99乘法表
  //以下一句是数组直接初始化的方法,在以后还会提到
  myarray := [9]int{1, 2, 3, 4, 5, 6, 7, 8, 9}
  for _, v := range myarray {
    l := 1
    for l <= v {
      fmt.Printf("%d*%d=%d\t", l, v, l*v)
      l++
    }
    fmt.Println()
  }


(三)终止、改变循环的条件




重点:语言可以在循环外面设置标签,可以跳出标签下的循环。(下面详细介绍)


①break
    默认跳出一层循环 直接在指定位置进行break
    加上标签的话跳出标签下的循环


打印1-100的笛卡尔积:
//抛出锚点(标签)
Here:
  for i := 0; i < 100; i++ {
    for j := 0; j < 100; j++ {
      fmt.Println(i, "与", j,"乘积为",i*j)
      if j == 10 {
        break Here
      }
    }
  }
-------------------------------------------------------------------------------------
因为有循环条件 
一般的break条件下应该是打印1000个数据
但是对标签进行跳出,就直接跳出了外层循环
打印结果为:(10个数据)
  0 与 0 乘积为 0
  0 与 1 乘积为 0
  0 与 2 乘积为 0
  0 与 3 乘积为 0
  0 与 4 乘积为 0
  0 与 5 乘积为 0
  0 与 6 乘积为 0
  0 与 7 乘积为 0
  0 与 8 乘积为 0
  0 与 9 乘积为 0
  0 与 10 乘积为 0
-------------------------------------------------------------------------------------


②continue


    默认跳出本次循环
    加上标签的话会跳出标签循环的语句的本次循环


打印1-100的笛卡尔积:
Here:
  for i := 0; i < 100; i++ {
    for j := 0; j < 100; j++ {
      fmt.Println(i, "与", j, "乘积为", i*j)
      if j == 10 {
        continue Here
      }
    }
  }
-------------------------------------------------------------------------------------
因为有循环条件 
一般的continue情况下应该是打印9900个数据
但是对标签进行跳过,就直接跳过了本次外层循环(相当于内置循环内有一个普通的break)
最终打印的数据只有1000个
-------------------------------------------------------------------------------------


③goto


    选定一个位置写一个锚点,执行到goto语句时跳转到指定的锚点。


使用goto打印99乘法表
  mystr := "%d*%d=%d\t"
  for i := 1; i < 10; i++ {
    j := 1
  Here:
    if j <= i {
      fmt.Print(fmt.Sprintf(mystr, j, i, i*j))
      j++
      goto Here
    } else {
      fmt.Println()
    }
  }


总的来说,go语言在循环方面引入标签这一操作,相对于其他语言来说是一大特色,但是循环时加入这种标签会让一般人(特别是其他语言转入go语言的程序员很不适应,合理的使用事半功倍,不熟悉的情况下使用后患无穷),另外goto语句会破坏代码的逻辑严密,所以介意大家以后尽少使用。


ff244446d0904604acee0741e3847893.jpg


GO GO GO !

相关文章
|
7天前
|
存储 JSON 监控
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
26 2
|
6天前
|
Go 索引
go语言中的循环语句
【11月更文挑战第4天】
15 2
|
6天前
|
Go C++
go语言中的条件语句
【11月更文挑战第4天】
19 2
|
8天前
|
监控 Go API
Go语言在微服务架构中的应用实践
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出,成为构建微服务的理想选择。本文将探讨Go语言在微服务架构中的应用实践,包括Go语言的特性如何适应微服务架构的需求,以及在实际开发中如何利用Go语言的特性来提高服务的性能和可维护性。我们将通过一个具体的案例分析,展示Go语言在微服务开发中的优势,并讨论在实际应用中可能遇到的挑战和解决方案。
|
6天前
|
Go
go语言中的 跳转语句
【11月更文挑战第4天】
14 4
|
5天前
|
JSON 安全 Go
Go语言中使用JWT鉴权、Token刷新完整示例,拿去直接用!
本文介绍了如何在 Go 语言中使用 Gin 框架实现 JWT 用户认证和安全保护。JWT(JSON Web Token)是一种轻量、高效的认证与授权解决方案,特别适合微服务架构。文章详细讲解了 JWT 的基本概念、结构以及如何在 Gin 中生成、解析和刷新 JWT。通过示例代码,展示了如何在实际项目中应用 JWT,确保用户身份验证和数据安全。完整代码可在 GitHub 仓库中查看。
20 1
|
7天前
|
Go 调度 开发者
探索Go语言中的并发模式:goroutine与channel
在本文中,我们将深入探讨Go语言中的核心并发特性——goroutine和channel。不同于传统的并发模型,Go语言的并发机制以其简洁性和高效性著称。本文将通过实际代码示例,展示如何利用goroutine实现轻量级的并发执行,以及如何通过channel安全地在goroutine之间传递数据。摘要部分将概述这些概念,并提示读者本文将提供哪些具体的技术洞见。
|
11天前
|
JavaScript Java Go
探索Go语言在微服务架构中的优势
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出。本文将深入探讨Go语言在构建微服务时的性能优势,包括其在内存管理、网络编程、并发模型以及工具链支持方面的特点。通过对比其他流行语言,我们将揭示Go语言如何成为微服务架构中的一股清流。
103 53
|
10天前
|
Ubuntu 编译器 Linux
go语言中SQLite3驱动安装
【11月更文挑战第2天】
33 7
|
11天前
|
关系型数据库 Go 网络安全
go语言中PostgreSQL驱动安装
【11月更文挑战第2天】
42 5

相关实验场景

更多