美文网首页
Go语言基础07-语句

Go语言基础07-语句

作者: isAlucard | 来源:发表于2019-02-01 14:25 被阅读0次
    语句

    分为一般语言都有的语句:

    • 选择语句:if...else, switch
    • 循环语句:for

    Go特有的语句:

    • 并发go和通信chan
    • 延迟defer、panic和recover

    选择语句

    if... else...

    // 推荐的用法是不用else,直接在if里返回
    if err := doSome(); err != nil {
     xxx
    }
    xxxx
    

    swith

    // 不需要break(相当于每个case下会默认帮忙补全break)
    // 如果需要连续执行,需要添加fallthrough
    switch val.(type) {
    case string:
      xxx
    case int, int32, int64:
      xxx
    case bool:
      xxx
      fallthrough
    case float64:
      xxx
    default:
      xxx
    }
    

    循环语句

    for

    // 一般的索引递增
    for i:=0; i< len(arr); i++ {
      xxx
    }
    
    // for ...range进行遍历
    for k,v := range map {
      xxx
    }
    for i, item := range arr {
      xxx
    }
    

    并发

    使用go关键词创建并发(异步)

    go func(){
      doAPIReq()
    }()
    

    延迟、panic和 recover

    使用defer语句定义延迟操作,定义的延迟操作会在return的前一步执行
    通常用于关闭通道、文件等

    func getFileContent() string {
        f, _ := os.OpenFile(name, os.O_RDONLY, 0)
        defer f.Close() // idiomatic Go code!
        contents, _ := ioutil.ReadAll(f)
        return string(contents)
    }
    

    panic和error的区别是,err 是将错误记录下来。但是panic是在遇到预期之外的错误,记录错误,并中断程序的执行。

    func doSome() {
      xxx
      //这里发生了什么,预期之外
      if xxx {
      panic("info")
      } 
    }
    

    recover用于恢复异常,通常是在一个方法A内发生了panic,则在调用A的外层方法中实行recover(),恢复程序的执行,并转换成err。

    func B() {
      defer func(){
        if e := recover(); e != nil {
          xxx
        }
      }()
    
      doSome()
    }
    

    相关文章

      网友评论

          本文标题:Go语言基础07-语句

          本文链接:https://www.haomeiwen.com/subject/yrzrsqtx.html