Есть ли способ манипулировать стеком отсрочки в GO? - PullRequest
0 голосов
/ 13 мая 2018

Есть ли способ изменить стек отложений?Например, добавить вызов в конец стека отложений или удалить последний отложенный элемент?

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Единственная возможная модификация стека defer - это «вытолкнуть» его.

Сказав это, вы можете сделать опцию отсрочкой необязательной с переменной для досрочного выхода из отложенной функции.Пример:

func foo() {
    var skipDefer bool
    defer func() {
        if skipDefer {
            return
        }
        // Do body of defer
    }()
    // Do stuff
    if someConditionIsTrue {
        skipDefer = true
    }
    defer func() {
        // Do this one unconditionally
    }
    // Do other stuff
}

Вы также можете управлять списком функций, которые будут выполняться вручную, если вы действительно хотите:

func foo() {
    var deferreds []func()
    defer func() {
        for _, f := range deferreds {
            f()
        }
    }()
    // Add to and arrange `deferreds` to your heart's content

}
0 голосов
/ 13 мая 2018

Стек defer - это стек LIFO, поэтому вы, очевидно, можете влиять на порядок выполнения отложенных операторов в теле функции.

Тем не менее, ваш вопрос, похоже, касается изменения стека откладывания способами , отличными от простого изменения порядка, в котором к нему добавляются вещи , который в настоящее время не поддерживается средой выполнения Go. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...