写点什么

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

作者:王中阳Go
  • 2022-10-19
    北京
  • 本文字数:1655 字

    阅读完需:约 1 分钟

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

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

if 判断

基本用法

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


输出结果:你成年了

多个判断条件 elseif

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


输出结果:青年

if 判断中的作用域

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


age := 20if 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)}
复制代码


打印结果:


变形 1:作用域问题

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


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


打印结果:


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

我们注意看i++的位置


i := 1for i < 10 {   fmt.Println(i)   i++}
复制代码


打印结果:


无限循环模式

for {   fmt.Println("无限循环")}
复制代码


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


for range 循环

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


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


打印结果:


跳出 for 循环之:break

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


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


打印结果:


跳出 for 循环之:continue

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


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


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


跳出 for 循环之:goto

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


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


举个栗子:


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


普通写法如下:


flag := falsefor 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)      }   }
// 定义labelxx: 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()}
复制代码


打印结果:


总结

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


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

一起学习,升级打怪

我们搞了一个对学 Go 真正有帮助的群,欢迎加入:


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


微信号:wangzhongyang1993

发布于: 刚刚阅读数: 3
用户头像

王中阳Go

关注

公众号:程序员升级打怪之旅 2022-10-09 加入

微信:wangzhongyang1993

评论

发布
暂无评论
Go语言 if判断和for循环实战 goto使用的那些坑_Go_王中阳Go_InfoQ写作社区