编程技术文章分享与教程

网站首页 > 技术文章 正文

Go语言基础—流程控制之for循环结构

hmc789 2024-11-27 14:49:19 技术文章 2 ℃

for循环

  • 循环:让程序多次执行相同的代码块
  • for循环是Go语言中唯一一个循环结构
  • for循环经典语法

先执行表达式1

执行表达式2判断是否成立,如果成立执行循环体

循环体执行完成后,执行表达式3

再次执行表达式2,判断是否成立

func main() {
   for 表达式1;表达式2;表达式3{
      //循环体
   }
}
  • for循环用得最多的地方就是遍历数组或切片等


代码示例

  • 经典for循环结构中,for关键字后面有3个表达式,且每个表达式都可以省略
func main() {
   for i := 0; i < 5; i++{
      fmt.Println(i)
   }
   //等价于
   j := 0
   for ; j <5; {
      fmt.Println(j)
      j++
   }
   //死循环
   for ;; {
       fmt.Println("test")
       }
}


使用for循环遍历数组

  • 可以通过数组的长度判断循环结束条件遍历整个数组
func main() {
   arr := [3]string{"smallming", "张", "三"}
   for i := 0; i < len(arr); i++{
      fmt.Println(arr[i])
   }
}
  • for循环遍历数组等,时常与range结合使用

range函数返回两个值,第一个是脚标,第二个是内容

func main() {
   arr := [3]string{"smallming", "张", "三"}
   for i, n := range arr {
      //其中n=arr[i]
      fmt.Println(i, n)
   }
}
/*输出:
0 smallming
1 张
2 三
*/

双重for循环

  • 可以在循环中执行循环,称为双重for循环
  • 代码示例
func main() {
   for i := 0; i <2; i++ {
      for j := 0; j < 2; j++ {
         fmt.Println(i, j)
      }
   }
}

#注意事项:

只有当子循环完全执行结束才能再次执行外侧循环,因为循环体执行完才能执行表达式3(i++部分)


冒泡排序

  • 排序就是把一组数据按照特定的顺序重新排列,可以是升序,降序等
  • 冒泡排序利用双重for循环把最大(小)的值移动到一侧,每次可以判断出一个数据,如果有n个数组,执行n-1次循环
  • 排序代码(升序还是降序主要是看if判断是大于还是小于)
func main() {
   arr := [...]int{1, 7, 3, 5}
   for i := 0; i < len(arr)-1; i++ {
      for j := 0; j < len(arr)-1; j++ {
         if arr[j] > arr[j+1] {
            arr[j], arr[j+1] = arr[j+1], arr[j]
         }
      }
   }
   fmt.Println(arr)  //输出:[1 3 5 7]
}


continue、break在循环中的应用

一、continue

  • continue关键字控制结束本次循环体,跳过本次,执行表达式三
func main() {
   for i := 0; i < 5; i++ {
      //fmt.Println("start", i)
      if i == 2 || i ==3 {  //跳过2和3
         continue
      }
      fmt.Println("结束", i)
      /*输出:
      结束 0
      结束 1
      结束 4
       */
   }
}
  • 在双重for循环中continue默认影响最内侧循环,与最外层循环无关
func main() {
   for i := 0; i < 2; i++ {
      for k := 0; k < 3; k++{
         if i == 1 {
            continue
         }
         fmt.Println(i, k, "结束")
         /*输出:
         0 0 结束
         2 0 结束
          */
      }
   }
}


  • Go语言执行标签写法,可以通过定义标签让continue控制影响哪个for循环
func main() {
   myfor: for k := 0; k <2; k++{
      for i := 0; i < 3; i++ {
         if i == 1 {
            continue myfor
         }
         fmt.Println(k,i,"结束")
         /*输出:i无1,i为1时,结束外侧循环
         0 0 结束
         1 0 结束
          */
      }
   }
}


二、break

break可以中断for循环,无论for循环还有几次执行,立即停止

func main() {
   for i:=0; i<5; i++ {
      if i == 2{
         break
      }
      fmt.Println(i) //输出0 1 ,从2开始中断,2及以后的循环都不执行
   }
}


  • 在双重for循环中,break默认也影响到最近的for循环
func main() {
   for i := 0; i < 2; i++ {
      for j := 0; j < 2; j++ {
         if j == 1 {
            break
         }
         fmt.Println(i, j)
         /*
         0 0
         1 0
          */
      }
   }
}
标签列表
最新留言