Go语言 if判断和for循环实战 goto使用的那些坑

简介: 这篇文章将介绍if判断、for循环、fori循环、for range、for循环作用域、goto如何使用、goto的使用需要注意的问题,以及使用for循环打印9*9乘法表的实战应用。

if判断


基本用法


age := 20
if age > 18 {
   fmt.Println("你成年了")
} else {
   fmt.Println("你写作业去吧")
}


输出结果:你成年了


多个判断条件 elseif


age := 20
if age > 35 {
   fmt.Println("人到中年")
} else if age > 18 {
   fmt.Println("青年")
} else {
   fmt.Println("少年")
}


输出结果:青年


if判断中的作用域


还有一种特殊用法,作用域:即变量只在for循环内生效,不影响外部的变量。


age := 20
if age := 15; age > 18 {
   fmt.Println("你成年了")
} else {
   fmt.Println("你写作业去吧")
}
fmt.Println(age) 


输出结果:你写作业去吧  20


总结:打印的20是if判断外面定义的age :=20,如果我们没在if判断外定义age,是不能在if判断外打印age的。


for循环


基本for循环


for i := 0; i < 10; i++ {
   fmt.Println(i)
}


打印结果:


微信图片_20221112143208.jpg


变形1:作用域问题


和上面讲if时一样,for也支持作用域设置,当我们的参数是从外部传入时可以这样写: 省略for循环的第一个参数


i := 5
for ;i<10;i++ {
   fmt.Println(i)
}


打印结果:


微信图片_20221112143211.jpg


变形2:第三个参数写到结构体内部


我们注意看i++的位置


i := 1
for i < 10 {
   fmt.Println(i)
   i++
}


打印结果:


微信图片_20221112143214.jpg


无限循环模式


for {
   fmt.Println("无限循环")
}


微信图片_20221112143218.jpg


控制台一直无限循环的打印无限循环


for range 循环


这是我们最常用也是最好用的循环结构体


s := "hello王中阳"
for i, i2 := range s {
   fmt.Printf("ikey值为:%v,i2字符为:%c\n",i,i2)
}


打印结果:


微信图片_20221112143221.jpg


跳出for循环之:break


遇到特定情况跳出for循环,不再继续执行时,使用break。


for i := 0; i < 10; i++ {
   if i==5 {
      break
   }
   fmt.Println(i)
}
fmt.Println("打印结束")


打印结果:


微信图片_20221112143224.jpg



跳出for循环之:continue


遇到特定情况跳出本次for循环,继续执行后面的for循环,使用continue。


for i := 0; i < 10; i++ {
   if i == 5 {
      continue
   }
   fmt.Println(i)
}
fmt.Println("打印结束")


打印结果: 我们可以发现下面的打印结果中只是没有打印5,只把i==5的循环跳过了


微信图片_20221112143227.jpg


跳出for循环之:goto


goto是一个非常灵活的用法,这里要重点看一下,很有用。

但是我个人不建议使用goto,因为会让代码变得难懂。了解goto的目的一是为了处理特殊场景,二是为了当别人这么写时我们能看懂,起码知道goto这个概念。


举个栗子:


我们设置一个双重for循环,当遇到C时就跳出循环,不再继续执行。


普通写法如下:


flag := false
for i := 0; i < 10; i++ {
   for j := 'A'; j < 'Z'; j++ {
      if j == 'C' {
         flag = true
         break
      }
      fmt.Printf("%v-%c\n", i, j)
   }
   if flag {
      fmt.Println("over")
      break
   }
}


使用goto


for i := 0; i < 10; i++ {
      for j := 'A'; j < 'Z'; j++ {
         if j == 'C' {
            goto xx //跳转到定义的label语句,即直接跳出了for循环
         }
         fmt.Printf("%v-%c\n", i, j)
      }
   }
   // 定义label
xx:
   fmt.Println("over")


总结:用法其实很简单,当我们项目复杂时,合理的使用goto能简化代码;但是千万不要滥用goto,否则会导致代码晦涩难懂。


应用实战


下面让我们开通脑筋,打印9*9乘法表出来吧


不要看答案,先动脑筋想一下吧

.

.

.

给个提示:双重for循环

.

.

.

我的实战代码如下:


for i := 1; i < 10; i++ {
   for j := 1; j <= i; j++ {
      fmt.Printf("%d * %d = %d  ", i, j, i*j)
   }
   fmt.Println()
}


打印结果:


微信图片_20221112143231.jpg


总结


整体来说go语言的if判断和for循环的使用还是非常简单的,我们需要注意作用域问题。至于跳出for循环的操作:break和continue和其他语言是一样的,也非常好理解。

关于for循环,除了打印9*9乘法表这类好玩的实战,大家还有哪些经典案例欢迎在评论区留言。


公众号:程序员升级打怪之旅

微信号:wangzhongyang1993

相关文章
|
2天前
|
安全 Go 开发者
Golang深入浅出之-Go语言并发编程面试:Goroutine简介与创建
【4月更文挑战第22天】Go语言的Goroutine是其并发模型的核心,是一种轻量级线程,能低成本创建和销毁,支持并发和并行执行。创建Goroutine使用`go`关键字,如`go sayHello(&quot;Alice&quot;)`。常见问题包括忘记使用`go`关键字、不正确处理通道同步和关闭、以及Goroutine泄漏。解决方法包括确保使用`go`启动函数、在发送完数据后关闭通道、设置Goroutine退出条件。理解并掌握这些能帮助开发者编写高效、安全的并发程序。
10 1
|
2天前
|
人工智能 Go 调度
掌握Go并发:Go语言并发编程深度解析
掌握Go并发:Go语言并发编程深度解析
|
2天前
|
SQL 关系型数据库 MySQL
Golang数据库编程详解 | 深入浅出Go语言原生数据库编程
Golang数据库编程详解 | 深入浅出Go语言原生数据库编程
|
3天前
|
Go 开发者
Golang深入浅出之-Go语言流程控制:if、switch、for循环详解
【4月更文挑战第21天】本文介绍了Go语言中的流程控制语句,包括`if`、`switch`和`for`循环。`if`语句支持简洁的语法和初始化语句,但需注意比较运算符的使用。`switch`语句提供多分支匹配,可省略`break`,同时支持不带表达式的形式。`for`循环有多种形式,如基本循环和`for-range`遍历,遍历时修改原集合可能导致未定义行为。理解并避免易错点能提高代码质量和稳定性。通过实践代码示例,可以更好地掌握Go语言的流程控制。
11 3
Golang深入浅出之-Go语言流程控制:if、switch、for循环详解
|
3天前
|
Go
Golang深入浅出之-Go语言函数基础:定义、调用与多返回值
【4月更文挑战第21天】Go语言函数是代码组织的基本单元,用于封装可重用逻辑。本文介绍了函数定义(包括基本形式、命名、参数列表和多返回值)、调用以及匿名函数与闭包。在函数定义时,注意参数命名和注释,避免参数顺序混淆。在调用时,要检查并处理多返回值中的错误。理解闭包原理,小心处理外部变量引用,以提升代码质量和可维护性。通过实践和示例,能更好地掌握Go语言函数。
17 1
Golang深入浅出之-Go语言函数基础:定义、调用与多返回值
|
4天前
|
程序员 Go API
【Go语言快速上手(二)】 分支与循环&函数讲解
【Go语言快速上手(二)】 分支与循环&函数讲解
|
4天前
|
Go
Golang深入浅出之-Go语言基础语法:变量声明与赋值
【4月更文挑战第20天】本文介绍了Go语言中变量声明与赋值的基础知识,包括使用`var`关键字和简短声明`:=`的方式,以及多变量声明与赋值。强调了变量作用域、遮蔽、初始化与零值的重要性,并提醒读者注意类型推断时的一致性。了解这些概念有助于避免常见错误,提高编程技能和面试表现。
19 0
|
4天前
|
编译器 Go 开发者
Go语言入门|包、关键字和标识符
Go语言入门|包、关键字和标识符
22 0
|
存储 JSON API
Go语言:RESTful API 服务,急速入门!
REST即表述性状态传递(英文:Representational State Transfer,简称REST),它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性
407 0
Go语言:RESTful API 服务,急速入门!
|
机器学习/深度学习 前端开发 Java
go语言可以做什么?入门Go语言
go语言可以做什么?入门Go语言
132 0