当前位置: 首页 > article >正文

go语言for的三种形式

循环语句for

1.1.1. Golang for支持三种循环方式,包括类似 while 的语法。

for循环是一个循环控制结构,可以执行指定次数的循环。

语法

Go语言的For循环有3中形式,只有其中的一种使用分号。

for init; condition; post { }
for condition { }
for { }
init: 一般为赋值表达式,给控制变量赋初值;
condition: 关系表达式或逻辑表达式,循环控制条件;
post: 一般为赋值表达式,给控制变量增量或减量。
for语句执行过程如下:
①先对表达式 init 赋初值;
②判别赋值表达式 init 是否满足给定 condition 条件,若其值为真,满足循环条件,则执行循环体内语句
然后执行 post,进入第二次循环,再判别 condition;否则判断 condition 的值为假,不满足条件,就终止for循环,执行循环体外语句。
func te() {
   s := "abc"
   for i, n := 0, len(s); i < n; i++ { // 常见的 for 循环,支持初始化语句。
      println(s[i])
   }
   n := len(s)
   for n > 0 { // 替代 while (n > 0) {}
      println(s[n]) // 替代 for (; n > 0;) {}
      n--
   }
   for { // 替代 while (true) {}
      println(s) // 替代 for (;;) {}
   }
}

不要期望编译器能理解你的想法,在初始化语句中计算出全部结果是个好主意。

func test() {
   s := "abcd"
   for i, n := 0, len(s); i < n; i++ { // 避免多次调用 length 函数。
      println(i, s[i])
   }
}

实例:

func intlen() {
   var b int = 15
   var a int

   numbers := [6]int{1, 2, 3, 5}

   /* for 循环 */
   for a := 0; a < 10; a++ {
      fmt.Printf("a 的值为: %d\n", a)
   }

   for a < b {
      a++
      fmt.Printf("a 的值为: %d\n", a)
   }

   for i, x := range numbers {
      fmt.Printf("第 %d 位 x 的值 = %d\n", i, x)
   }
}

以上实例运行输出结果为:

a 的值为: 0
a 的值为: 1
a 的值为: 2
a 的值为: 3
a 的值为: 4
a 的值为: 5
a 的值为: 6
a 的值为: 7
a 的值为: 8
a 的值为: 9
a 的值为: 1
a 的值为: 2
a 的值为: 3
a 的值为: 4
a 的值为: 5
a 的值为: 6
a 的值为: 7
a 的值为: 8
a 的值为: 9
a 的值为: 10
a 的值为: 11
a 的值为: 12
a 的值为: 13
a 的值为: 14
a 的值为: 15
第 0 位 x 的值 = 1
第 1 位 x 的值 = 2
第 2 位 x 的值 = 3
第 3 位 x 的值 = 5
第 4 位 x 的值 = 0
第 5 位 x 的值 = 0

1.1.2. 循环嵌套

在 for 循环中嵌套一个或多个 for 循环

语法

以下为 Go 语言嵌套循环的格式:

for [condition |  ( init; condition; increment ) | Range]{
   for [condition |  ( init; condition; increment ) | Range]
   {
      statement(s)
   }
   statement(s)}

实例:

以下实例使用循环嵌套来输出 2 到 100 间的素数:

func test() {
   /* 定义局部变量 */
   var i, j int

   for i = 2; i < 100; i++ {
      for j = 2; j <= (i / j); j++ {
         if i%j == 0 {
            break // 如果发现因子,则不是素数
         }
      }
      if j > (i / j) {
         fmt.Printf("%d  是素数\n", i)
      }
   }
}

以上实例运行输出结果为:

    2  是素数
    3  是素数
    5  是素数
    7  是素数
    11  是素数
    13  是素数
    17  是素数
    19  是素数
    23  是素数
    29  是素数
    31  是素数
    37  是素数
    41  是素数
    43  是素数
    47  是素数
    53  是素数
    59  是素数
    61  是素数
    67  是素数
    71  是素数
    73  是素数
    79  是素数
    83  是素数
    89  是素数
    97  是素数

1.1.3. 无限循环

如过循环中条件语句永远不为 false 则会进行无限循环,我们可以通过 for 循环语句中只设置一个条件表达式来执行无限循环:

func test() {
   for true {
      fmt.Printf("这是无限循环。\n")
   }
}


http://www.kler.cn/a/7440.html

相关文章:

  • Flowable 构建后端服务(后端以及数据库搭建) Flowable Modeler 设计器搭建(前端)
  • JavaEE 重要的API阅读
  • 控制器ThinkPHP6
  • 【大数据学习 | HBASE高级】hbase-phoenix 与二次索引应用
  • Javascript_设计模式(二)
  • Flutter:Widget生命周期
  • CF1748E Yet Another Array Counting Problem
  • 关于CH32F203程序下载方式说明
  • Linux VIM编辑器常用指令
  • ffmpeg关于视频前几秒黑屏的问题解决
  • 多线程的锁策略
  • Python 自动化指南(繁琐工作自动化)第二版:八、输入验证
  • 中间表示- 三地址码
  • 从零开始实现一个C++高性能服务器框架----环境变量模块
  • 2 新建工程步骤
  • 045:cesium加载OpenStreetMap地图
  • 第十四届蓝桥杯模拟赛(第一期)——C语言版
  • 详解如何使用Nginx搭建文件服务器及实现文件服务
  • 询问ChatGPT的高质量答案艺术——提示工程指南(更新中……)
  • 什么是服务架构?微服务架构的优势又是什么?
  • 聚会Party
  • 剪枝与重参第四课:NVIDIA的2:4剪枝方案
  • 做了个springboot接口参数解密的工具,我给它命名为万能钥匙(已上传maven中央仓库,附详细使用说明)
  • 4.5--计算机网络之基础篇--1.模型分层--(复习+深入)---好好沉淀,加油呀
  • Elasticsearch:索引状态是红色还是黄色?为什么?
  • C++ 数组与字符串详解