千家信息网

Golang中的控制流是怎样的

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,Golang中的控制流是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。控制结构分为: 条件+选择+循环IF1.说明
千家信息网最后更新 2026年11月01日Golang中的控制流是怎样的

Golang中的控制流是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

控制结构分为: 条件+选择+循环

IF

1.说明

代码如下:


条件表达式没有括号
支持一个初始化表达式(可以是多变量初始化语句)
初始化语句中定义的都是只能在block级别中使用的局部变量,不能在block之外使用
左大括号必须和条件语句在同一行(必须与if/else在同一行)
go没有三元运算符

if判断语句条件不需要括号
在判断语句里卖弄允许声明一个变量,其作用域只在逻辑块内,其他地方不起作用
花括号一定存在,且必须与if/else在同一行

2.语法

代码如下:


//基本
if a > 0 { //无括号
dosomething()
} else if a == 0 { //必须用花括号
doothertings()
} else {
donothing()
}

//单行模式
if a > 0 { a += 100 } else { a -= 100 }

3.示例

代码如下:


package main

func main(){
a := 10

if a > 0 {
a += 100
} else if a == 0 {
a = 0
} else {
a -= 100
}
println(a)

b := 101
if b > 0 { b += 100 } else { b -= 100 }
println(b)
}

//支持一个初始化语句
if a:=1; a<10 { //允许在条件之前执行一个简单语句,由此语句定义的变量作用域仅在if/else范围内
return a
}
if a, b := 1,2; a+b == 10 {
}

if x := computedValue(); x > 10 {
} else {
}

4.结果

代码如下:


110
201

注意,在有返回值的函数中,不允许将"最终的"return语句放到if ... else ... 结构中,否则编译失败

代码如下:


func example(x int) int {
if x == 0 {
return 5
} else {
return x
}
}

FOR

for是go的"while", 只支持for关键字.有三种形式

1.语法

代码如下:


for init; condition; post {
//init不支持逗号,只能平行赋值
//condition每次循环开始都会检查,不建议在里面使用函数,建议用计算好的变量/常量代替
//post后面必须跟花括号,每轮循环结束的时候调用
}

for i:=0; i<10; i++ {
}

-----------------------------

for condition {
dosomething()
}

i:=1
for i<10 {
}

-----------------------------

for { //无限循环
dosomething()
}

for {
a++
if a > 10 {
break
}
}

-----------------------------

2.说明

代码如下:


a. 初始化和步进表达式可以使多个值:必须使用平行赋值
i, j:=0,len(a)-1; ib.每次循环都会重新检查条件表达式

3.示例

代码如下:


package main

func main(){
ss := "abcd"
for i:=0; iprintln(ss[i])
}
}

得到:

代码如下:


97
98
99
100

4.配合range

for循环和保留字range一起使用,完成迭代器iterator操作

string, array, slice, map, channel都可以用range进行迭代器操作

range返回序号和值,若是不想要,可以用_

代码如下:


for i, c := range "abc" {
fmt.Printf("s[%d] = %c\n", i, c)
}


得到

代码如下:


s[0] = a
s[1] = b
s[2] = c

SWITCH

python里面没有

1.语法

支持初始化表达式

代码如下:


switch a:=5; a { //默认break,匹配成功后不会自动向下执行其他case,而是跳出整个switch
case 0: //普通
println(a)
case 1, 2: //多个分支,逗号分隔
println(a)
case 100: //什么都不做
case 5:
println(a)
fallthrough //进入后面的case 进行处理,而不是跳出block
default:
println(a) //默认
}
注意,不需要break来明确退出一个case,一旦条件符合,自动终止,除非使用fallthough

--------------

可以不带表达式
switch sExpr {
case expr1: //sExpr和expr1必须类型一致,不限制为常量或者证书,可以用任何类型或表达式
...
}

switch {
case 0 <= Num && Num <= 3:
fmt.Printf("3")
}

几种形式:

代码如下:


a := 1
switch a {
case 0:
...
}

a := 1
switch {
case a>=0:
....
case a>1:
....
}

switch a:=1; {
case a>=0:
...
case a>1:
...
}

2.替代if...else if…else…

不指定switch 条件表达式(没有条件表达式,在case语句中有),或者直接为true

代码如下:


a := 5
switch { //两句可合并位 switch a:=5; {
case a > 1:
println("a")
case a > 2:
println("b")
default:
println("c")
}

goto break continue

均可配合标签使用(标签区分大小写,若声明了没有使用会导致编译错误)

break/continue可配合标签用于多重循环跳出
goto是调整执行位置,与其他两个执行结果并不相同

1.goto

支持函数内部goto跳转

请善用

必须跳转到当前函数内定义的标签,标签名大小写敏感

代码如下:


func myFunc() {
i := 0
Here:
println(i)
i++
goto Here
}


2.continue

进入下一次循环

3.break

终止循环

代码如下:


for index := 10; index > 0; index -- {
if index == 5 {
break //continue
}
}


示例

代码如下:


package main
func main(){
a := 1
LABEL1:
println("inc a=", a)
a += 1

LABEL2:
//println("here")

for ; a < 6; {
println(a)
if a == 3 {
a += 1
continue LABEL2
}
if a == 5 {
break
}
goto LABEL1
}
}

结果:

代码如下:


inc a= 1
2
inc a= 2
3
4
inc a= 4
5

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

代码 语句 条件 表达式 循环 括号 支持 变量 函数 标签 一行 作用 示例 结果 语法 控制 多个 大小 常量 建议 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技有限公司 互联网科技公司简介 金诺互联网科技 致聘互联网科技 沃里互联网科技 滨湖区互联网智能科技产品供应 互联网教育科技公司vipkid 互联网科技实习生岗位职责 互联网和黑科技的看法 亳州好赞互联网科技有限公司 民营互联网公司国防科技 华中科技大学互联网的牛人 上海钢联属于互联网科技股吗 广州百诚互联网科技有限公司官网 工业互联网科技创业 米泉互联网科技专业怎么样 绵阳真晨互联网科技有限公司 互联网科技品牌 盐城市攀科互联网科技有限公司 山东蛋芒互联网科技有限公司 互联网金融公司科技 互联网金融科技创新 互联网科技咨询 上海电发互联网科技有限公司 随着互联网科技发展 互联网金融中的现代科技 富国互联网金融科技混合基金 艺电能源互联网科技有限公司招聘 中国科技和美国互联网 上海旺乐尼互联网科技有限公司
0