如何使用request.Context而不是CloseNotifier?

时间:2019-02-26 17:13:54

标签: go

我在应用程序中使用CloseNotifier,代码如下所示:

func Handler(res http.ResonseWriter, req *http.Request) {
    notify := res.(CloseNotifier).CloseNotify()

    someLogic();
    select {
        case <-notify:
            someCleanup()
            return;
        default:
    }
    someOtherLogic();
}

我注意到CloseNotifier现在已被弃用。 From source code

// Deprecated: the CloseNotifier interface predates Go's context package.
// New code should use Request.Context instead.

但是,我不确定确切如何在此处使用Request.Context。

1 个答案:

答案 0 :(得分:0)

实际上似乎很简单。 From this blogpost

func Handler(res http.ResonseWriter, req *http.Request) {
    ctx := req.Context()

    someLogic();
    select {
        case <-ctx.Done():
            someCleanup(ctx.Err())
            return;
        default:
    }
    someOtherLogic();
}