Go-分支和循环总结(if、else、switch、for、range、continue、break等)

简介: Go-分支和循环总结(if、else、switch、for、range、continue、break等)

分支

if

if 布尔表达式 {

  /* 在布尔表达式为 true 时执行 */

}

if 中可以直接定义变量

代码

  age := 0
  _, _ = fmt.Scanln(&age)
  if age > 18{
    fmt.Println("对自己负责")
  }
  if s:="呀";age>18{
    fmt.Println("对自己负责",s)
  }

if...else

if 布尔表达式 {

  /* 在布尔表达式为 true 时执行 */

} else {

 /* 在布尔表达式为 false 时执行 */

}

注意:else不能换行,必须在}后

代码

  _, _ = fmt.Scanln(&age)
  if age > 18{
    fmt.Println("对自己负责")
  } else {
    fmt.Println("年龄不大,放过你了")
  }

if..else if ...else

if 布尔表达式 {

  /* 在布尔表达式为 true 时执行 */

} else if 布尔表达式{

 /* 在布尔表达式为 true 时执行 */

} else {

/* 上述分支不满足时执行 */

}

else if 可以有多个,else可以没有

代码

  if age < 18 {
    fmt.Println("小孩纸~")
  } else if age >= 18 && age < 40{
    fmt.Println("青壮年~")
  }else{
    fmt.Println("不惑")
  }

switch

switch [表达式] {

   case val1[,...]:

       ...

   case val2[,val3,...]:

       ...

   default:

       ...

}

不需要break

val1 和 val2如果是常量,不能相同,val2和val3可以是同类型的任意值,也不能相同,变量的话没问题

为了实现其他语言,例如c++,不加break时,多case,一个结果的情况,一个case后可以加多个

表达式的结果类型要与case的一致,当然case也可以是变量、函数的返回值等

switch后可以定义变量,加分号结束(不推荐)

  day := ""
  _, _ = fmt.Scanln(&day)
  switch day{
    case "1":fmt.Println("星期一")
    case "2":fmt.Println("星期二")
    case "6","7":fmt.Println("周末")
    default:
      fmt.Println("懒得写了")
  }

switch穿透

使用关键字fallthrough,会强制执行下一个case,不做判断。不建议,就不举例了。

type-switch

类型断言的时候再举例。

循环

for

or 开始条件;继续条件;循环体后执行语句{

   循环体...

}

代码

  str := "lady_killer9"
  for i:=0;i< len(str);i++{
    fmt.Printf("%c",str[i])
  }

注意:开始条件、继续条件、循环体后执行语句 都是可以省略的,当开始条件及循环体后执行语句都省略时,两个分号也可以省略

for 继续条件{

   循环体...

}

for-range

for key,value := range 变量{

     循环体...

}

注意:循环体用不到key时,可以使用匿名变量接收

代码

  for index,val := range str{
    fmt.Println(index,string(val))
  }

Go中是没有while和do..while的,可以自己实现类型的逻辑。

实现while

for{

if condition{

break

}

do something;

}

代码

  i := 0
  for{
    if i == len(str){
      break
    }
    fmt.Printf("%c",str[i])
    i++
  }

换一种方式

  i = 0
  for i!=len(str){
    fmt.Printf("%c",str[i])
    i++
  }
  fmt.Println()

实现do...while

for{

do something;

if condition{

break

}

}

代码

  j := 0
  for{
    fmt.Printf("%c",str[j])
    j++
    if j == len(str){
      break
    }
  }

break

break可以指明跳出到哪一层使用标签,,默认是本层循环。

label:

   for {

       for{

           ...

          break label

           }

   }

代码

  arr := [2][2]int{{1,2},{3,4}}
  loop:
    for i:=0;i<len(arr);i++{
      for j:=0;j<len(arr[0]);j++{
        fmt.Println(arr[i][j])
        if arr[i][j] == 2{
          break loop
        }
      }
    }

continue

同上,可加label

代码

  arr := [2][2]int{{1,2},{3,4}}
  loop:
    for i:=0;i<len(arr);i++{
      for j:=0;j<len(arr[0]);j++{
        fmt.Println(arr[i][j])
        if arr[i][j] == 2{
          break loop
        }
      }
    }

continue

同上,可加label

代码

  loop2:
  for i:=0;i<len(arr);i++{
    for j:=0;j<len(arr[0]);j++{
      fmt.Println(arr[i][j])
      if arr[i][j] == 1{
        continue loop2
      }
    }
  }

goto

直接跳到某个标签处,不推荐

  for i:=0;i<len(arr);i++{
    for j:=0;j<len(arr[0]);j++{
      fmt.Println(arr[i][j])
      if arr[i][j] == 2{
        goto HI
      }
    }
  }
  HI:
    fmt.Println("hi, goto")

全部代码

分支

case.go

package main
import "fmt"
func main() {
  //--------------for---------------
  str := "lady_killer9"
  for i:=0;i< len(str);i++{
    fmt.Printf("%c",str[i])
  }
  fmt.Println()
  //-----------for range------------
  for index,val := range str{
    fmt.Println(index,string(val))
  }
  //-----------实现while-----------
  i := 0
  for{
    if i == len(str){
      break
    }
    fmt.Printf("%c",str[i])
    i++
  }
  fmt.Println()
  //-----------实现do...while...--------
  j := 0
  for{
    fmt.Printf("%c",str[j])
    j++
    if j == len(str){
      break
    }
  }
  fmt.Println()
  //------------label break------------
  fmt.Println("------------label break------------")
  arr := [2][2]int{{1,2},{3,4}}
  loop:
    for i:=0;i<len(arr);i++{
      for j:=0;j<len(arr[0]);j++{
        fmt.Println(arr[i][j])
        if arr[i][j] == 2{
          break loop
        }
      }
    }
  //------------label continue-------------
  fmt.Println("------------label continue-------------")
  loop2:
  for i:=0;i<len(arr);i++{
    for j:=0;j<len(arr[0]);j++{
      fmt.Println(arr[i][j])
      if arr[i][j] == 1{
        continue loop2
      }
    }
  }
  //----------label goto-------------------
  fmt.Println("----------label goto-------------------")
  for i:=0;i<len(arr);i++{
    for j:=0;j<len(arr[0]);j++{
      fmt.Println(arr[i][j])
      if arr[i][j] == 2{
        goto HI
      }
    }
  }
  HI:
    fmt.Println("hi, goto")
}

循环

for.go

package main
import "fmt"
func main() {
  //--------------for---------------
  str := "lady_killer9"
  for i:=0;i< len(str);i++{
    fmt.Printf("%c",str[i])
  }
  fmt.Println()
  //-----------for range------------
  for index,val := range str{
    fmt.Println(index,string(val))
  }
  //-----------实现while-----------
  i := 0
  for{
    if i == len(str){
      break
    }
    fmt.Printf("%c",str[i])
    i++
  }
  fmt.Println()
  i = 0
  for i!=len(str){
    fmt.Printf("%c",str[i])
    i++
  }
  fmt.Println()
  //-----------实现do...while...--------
  j := 0
  for{
    fmt.Printf("%c",str[j])
    j++
    if j == len(str){
      break
    }
  }
  fmt.Println()
  //------------label break------------
  fmt.Println("------------label break------------")
  arr := [2][2]int{{1,2},{3,4}}
  loop:
    for i:=0;i<len(arr);i++{
      for j:=0;j<len(arr[0]);j++{
        fmt.Println(arr[i][j])
        if arr[i][j] == 2{
          break loop
        }
      }
    }
  //------------label continue-------------
  fmt.Println("------------label continue-------------")
  loop2:
  for i:=0;i<len(arr);i++{
    for j:=0;j<len(arr[0]);j++{
      fmt.Println(arr[i][j])
      if arr[i][j] == 1{
        continue loop2
      }
    }
  }
  //----------label goto-------------------
  fmt.Println("----------label goto-------------------")
  for i:=0;i<len(arr);i++{
    for j:=0;j<len(arr[0]);j++{
      fmt.Println(arr[i][j])
      if arr[i][j] == 2{
        goto HI
      }
    }
  }
  HI:
    fmt.Println("hi, goto")
}

截图

分支

2020062310470442.png

循环

2020062310470442.png

更多Go相关内容:Go-Golang学习总结笔记

有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。


相关文章
|
9月前
|
Go
跳转语句:break、continue、goto -《Go语言实战指南》
本文介绍了 Go 语言中的三种跳转语句:`break`、`continue` 和 `goto`。`break` 用于跳出当前循环或选择结构,如 `for`、`switch` 和 `select`;`continue` 跳过当前循环的剩余部分并进入下一轮;`goto` 实现无条件跳转到指定标签,但需慎用以保持代码清晰。通过示例代码展示了它们的具体用法,并建议优先使用 `break` 和 `continue`,仅在特定场景(如资源清理)下考虑 `goto`。
|
12月前
|
Go C语言
Go语言入门:分支结构
本文介绍了Go语言中的条件语句,包括`if...else`、`if...else if`和`switch`结构,并通过多个练习详细解释了它们的用法。`if...else`用于简单的条件判断;`if...else if`处理多条件分支;`switch`则适用于基于不同值的选择逻辑。特别地,文章还介绍了`fallthrough`关键字,用于优化重复代码。通过实例如判断年龄、奇偶数、公交乘车及成绩等级等,帮助读者更好地理解和应用这些结构。
220 15
go语言中控制循环
go语言中控制循环
157 14
|
Go 索引
go语音中range 循环
go语音中range 循环
216 12
|
Go 索引
go语言使用range关键字
go语言使用range关键字
169 7
go语言中无限循环
go语言中无限循环
222 9
|
安全 Go 索引
go语言使用 range 关键字
go语言使用 range 关键字
192 3
|
测试技术 Go 索引
go语言使用 range 关键字遍历
go语言使用 range 关键字遍历
212 3
|
Java Go
go语言在 switch 语句中使用 break
go语言在 switch 语句中使用 break
412 5
go语言标签化的 break
go语言标签化的 break
210 2