1、创建野生Goroutine的建议方式,核心就是要 recover 住,不能因为野生 goroutine panic 导致进程退出。

    1. func Go(x func()){
    2. go func() {
    3. defer func(){
    4. if err := recover(); err != nil {
    5. fmt.Println(err)
    6. }
    7. }()
    8. x()
    9. }()
    10. }

    2、需要复制切片时,通过追加到一个nil切片来复制切片
    3、error处理

    • 尽量对外暴露方法,接口类型和常量要尽量少暴露,减少耦合
    • 如果要处理错误,一定要对 value 负责,比如赋一个默认值,或者进行降级,不处理错误就一定要往上抛,处理了错误(记日志),就不要往上抛,否则日志打的到处都是

    • 业务代码,第一次与基础库,rpc等交互的时候,对error进行wrap,后续代码中自己调用自己的函数时,直接return,将错误往上抛

    • 第一次错误的时候wrap,不一定是在最底层,但是需要自己能判断出来

    • error 处理库, pkg/errors

    golang