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学习总结笔记

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


相关文章
|
8天前
|
Go 索引
go语言中的循环语句
【11月更文挑战第4天】
19 2
Go语言的条件控制语句及循环语句的学习笔记
本文是Go语言的条件控制语句和循环语句的学习笔记,涵盖了if语句、if-else语句、if嵌套语句、switch语句、select语句以及for循环和相关循环控制语句的使用方法。
Go语言的条件控制语句及循环语句的学习笔记
|
3月前
|
存储 编译器 Go
|
3月前
|
Go
Go1.22 新特性:for 循环不再共享循环变量,且支持整数范围
Go1.22 新特性:for 循环不再共享循环变量,且支持整数范围
|
3月前
|
Go
Go 重构:尽量避免使用 else、break 和 continue
Go 重构:尽量避免使用 else、break 和 continue
|
3月前
|
算法 测试技术 Go
|
5月前
|
Go
go循环语句
go循环语句
|
9天前
|
存储 JSON 监控
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
30 2
|
8天前
|
Go C++
go语言中的条件语句
【11月更文挑战第4天】
21 2
|
3天前
|
Go API 数据库
Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
本文介绍了 Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
16 4