2017-11-08 11 views
1

リクエストがキャンセルされたかどうかを確認しようとするこの簡単なコードがあります。しかし驚くべきことに、それはtrueの代わりにfalseをgo 1.9に印刷します。リクエストがキャンセルされたかどうかを確認する方法

これを確認する正しい方法は何ですか?

package main 

import (
    "context" 
    "log" 
    "net/http" 
) 

func main() { 
    r, _ := http.NewRequest("GET", "http://example.com", nil) 
    ctx, cancel := context.WithCancel(context.Background()) 
    r = r.WithContext(ctx) 
    ch := make(chan bool) 
    go func() { 
     _, err := http.DefaultClient.Do(r) 
     log.Println(err == context.Canceled) 
     ch <- true 
    }() 
    cancel() 
    <-ch 
} 

答えて

4

あなたはコンテキストのエラーをチェックすることができます。

log.Println(ctx.Err() == context.Canceled) 
0

あなたはコンテキストがキャンセルされたかどうかを確認することができます。

if文は、ctxがキャンセルされたときにトリガされます。 ループは無限であり(ブレークが呼び出されない場合)、残りのコードと同時に実行されます。

関連する問題