GO:流程控制

if

用法:

复制代码
if condition {
    // do something 
}

if condition {
    // do something 
} else {
    // do something 
}

if condition1 {
    // do something 
} else if condition2 {
    // do something else    
}else {
    // catch-all or default
}

switch

相比较 C 和 Java 等其它语言而言,Go 语言中的 switch 结构使用上更加灵活。它接受任意形式的表达式:

复制代码
switch var1 {
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}

for

复制代码
for 初始化语句; 条件语句; 修饰语句 {}

示例:

复制代码
 for i := 0; i < 5; i++ {
        fmt.Printf("This is the %d iteration\n", i)
    }

for-range

这是 Go 特有的一种的迭代结构,您会发现它在许多情况下都非常有用。它可以迭代任何一个集合,语法上很类似其它语言中 foreach 语句。

复制代码
for pos, char := range str {
...
}

示例:

var a = 10int{1,2,3,4,5,6,7,8,9,0}

for _, e := range a {

fmt.Println(e)

}

Break 与 continue

break退出循环, continue调到下一个循环

复制代码
 for i:=0; i<3; i++ {
        for j:=0; j<10; j++ {
            if j>5 {
                break   
            }
            print(j)
        }
        print("  ")
    }
    结果:
    012345 012345 012345

for i := 0; i < 10; i++ {
        if i == 5 {
            continue
        }
        print(i)
        print(" ")
    }

label

Go语言也支持label(标签)语法:分别是break labe、 goto label和continuelabel。

复制代码
package main

import "fmt"

func main() {

Loop:
   for i := 0; i < 10; i++ {
      fmt.Println("label i is ", i)
      for j := 0; j < 10; j++ {
         if j > 5 {
            //跳到外面去啦,但是不会再进来这个for循环了
            break Loop
         }
      }
   }
   //跳转语句 goto语句可以跳转到本函数内的某个标签
   gotoCount := 0
GotoLabel:
   gotoCount++
   if gotoCount < 10 {
      goto GotoLabel //如果小于10的话就跳转到GotoLabel
   }
   fmt.Println(gotoCount)
   a:=0
   Clabel:
	for a < 20 {
		if a == 15 {
			a++
			continue Clabel
		}
		fmt.Println(a)
		a++
	}
}

输出:

label i is 0

10

10

11

12

13

14

16

17

18

19

break label:跳转标签(label)必须放在循环语句for前面,并且在break label跳出循环不再进入for循环里的代码。

goto label: 跳转标签(label)可以放在循环语句for前面,也可以放在后面,建议放在后面,避免出现死循环。

continue label:和break label 类似,跳转标签只能放在for前面,不会跳出for循环,只是跳过当前单次循环,继续下一次迭代。跟单独使用continue效果一样。

相关推荐
吃好睡好便好4 小时前
提取矩阵某一行或某一列元素
开发语言·人工智能·线性代数·算法·matlab·矩阵
小江的记录本7 小时前
【JVM虚拟机】垃圾回收GC:四种引用类型:强引用、软引用、弱引用、虚引用(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
小马爱打代码7 小时前
Spring源码 第四篇:Spring 5 源码深度拆解:AOP 全流程核心原理
java·后端·spring
deepin_sir7 小时前
10 - 函数
开发语言·python
z落落8 小时前
C#String字符串
开发语言·c#·php
猫头虎-前端技术8 小时前
JS 作用域与闭包:从变量提升到闭包陷阱的超详细解析
开发语言·javascript·云计算·bootstrap·ecmascript·openstack·perl
ServBay8 小时前
2026 Mac 本地大模型部署深度解析与混合架构指南
后端·macos·aigc
枫叶林FYL8 小时前
项目十:事件溯源仓储管理系统(WMS)仿真实现
开发语言·python
一拳一个娘娘腔8 小时前
【SRC漏洞挖掘系列】第10期:GraphQL & API 安全 —— 现代 API 的“裸奔”时代
后端·安全·graphql
繁华落尽,倾城殇?8 小时前
[C++11] : atomic,nullptr,default/delete,enum class
开发语言·c++·c++11·nullptr·atomic·enum class·default/delete