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

这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战」。

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

本文共1140字,知识点较为基础,阅读大约需要8~10分钟。

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)
}
复制代码

打印结果:

image.png

变形1:作用域问题

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

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

打印结果:

image.png

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

我们注意看i++的位置

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

打印结果:

image.png

无限循环模式

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

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

for range 循环

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

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

打印结果:

image.png

跳出for循环之:break

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

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

打印结果:

image.png

跳出for循环之:continue

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

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

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

image.png

跳出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()
}
复制代码

打印结果:

image.png

总结

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

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

最后

感谢阅读,欢迎大家三连:点赞、收藏、投币(关注)!!!

8e95dac1fd0b2b1ff51c08757667c47a.gif

Guess you like

Origin juejin.im/post/7069549500649439245