那些我的代码中从不用的 Golang 特性 - 马特-莱亚

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-1 23:35   30   0

- 我不使用的关键字

  • 我不用 goto

    goto 会让代码执行逻辑难以阅读和理解。

    另外还可以使用 label 标记来组织代码

    func main() {
    outer:
        for {
            log.Println("outer")
            for {
                log.Println("inner")
                break outer
            }
        }
    }
  • 我不用 fallthrough

    golang 的 switch 足够好用,不需要用 fallthrough 退化到其他语言的模式。

  • 我不用 else

    大部分的 else 可以用反转判断来实现。例如:

    if something.OK() {
        something.Lock()
        defer something.Unlock()
        err := something.Do()
        if err == nil {
                stop := StartTimer()
                defer stop()
                log.Println("working...")
                doWork(something)
                <-something.Done() // wait for it
                log.Println("finished")
                return nil
        } else {
                return err
        }
    } else {
        return errors.New("something not ok")
    }
    
    //
    // *守护式编程*
    // 上面的代码可以用反转判断来优化。
    if !something.OK() {  // flipped
        return errors.New("something not ok")
    }
    something.Lock()
    defer something.Unlock()
    err := something.Do()
    if err != nil {       // flipped
        return err
    }
    stop := StartTimer()
    defer stop()
    log.Println("working...")
    doWork(something)
    <-something.Done() // wait for it
    log.Println("finished")
    return nil
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP