Golang学习笔记:基本控制流程

转载请注明出处:https://blog.csdn.net/sublio/article/details/106478408

全系列目录:https://blog.csdn.net/sublio/article/details/106480267

基本控制流程

目录

基本控制流程

代码块

switch

for与range

defer

panic和recover

参考文档


 

代码块

  1. 有花括号构成

  2. 重新声明外层代码块声明过的标识符,此时外层空间外层代码块的那个同名标识符被屏蔽了

func main() {
   a := 1
   if a == 1 {
      var a string
      fmt.Println(a)
      {
         var a []int
         fmt.Println(len(a))
      }
   }
}

 

switch

  1. 同一个case后面可以接多个表达式,关系为或

  2. fallthrought向下一个case转移流程控制权

for与range

  1. 对字符串的range为rune(之前的用法可能有一些问题,应该转为[]byte再range)

  2. 对map进行range顺序是不一定的

  3. 对chan进行range,只有一个返回值,

  4. 可以对nil的silce和map进行range操作,只是没东西,

  5. 对nil的通道进行迭代,会导致当前流程永远阻塞在for语句上

defer

  1. 延迟调用指定函数

  2. 顺序:所有defer;返回;将运行时恐慌扩散至函数调用处

  3. 同一个函数里面多个defer对应函数的调用顺序:与defer执行顺序相反(先进后出)

  4. defer后面的函数要使用外部变量,应该使用参数传递

//示例1:输出55555
func main() {
   for i := 0; i < 5; i++ {
      defer func() {
         fmt.Println(i)
      }()
   }
}
//示例2:输出43210
func main() {
   for i := 0; i < 5; i++ {
      defer func(a int) {
         fmt.Print(a)
      }(i)
   }
}

 

panic和recover

  1. 手动停止当前流程并引发一个运行时恐慌(运行时恐慌不一定是panic引发的,有可能是go的运行时系统引发的,比如index out of range)

  1. panic()的参数可以是任务类型,一般是string或者error

  1. 用p := recover()来拦截运行时恐慌,有恐慌的时候p为非nil,用panic触发时p等于interface(panic的参数)

参考文档

《Go并发编程实战(第2版)》——郝林

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值