Redis 7.0.5 源码阅读笔记: goto 在 redis 中的应用

Redis163 字

在 C/C++ 很大一部分教材中都说不要使用 goto 关键字进行逻辑跳转,这是因为 goto 容易造成代码的不可维护,因为太多的跳转容易导致代码逻辑的凌乱,让人摸不到头脑,但是有一种情况是 goto 的不错应用场景,那就是在应用初始化失败时候来清理资源。

在《Linux C 程序设计王者归来》一书中有详细的解释说明。

接下来我们来看看在 redis 中的用法,其源代码在 src/anet.c 第 330 行:

            if (!bound) {
                anetSetError(err, "bind: %s", strerror(errno));
                goto error;
            }

如果 bound 失败,则直接跳转到 error 代码块,而 error 代码块就是处理资源释放的。


error:
    if (s != ANET_ERR) {
        close(s);
        s = ANET_ERR;
    }
maksim
Maksim(一笑,吡罗),PHPer,Goper
OωO
开启隐私评论,您的评论仅作者和评论双方可见