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

Airy · · 955 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

- 我不使用的关键字

  • 我不用 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

有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:Airy

查看原文:那些我的代码中从不用的 Golang 特性 - 马特-莱亚

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

955 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传