DEV Community

Clavin June
Clavin June

Posted on • Originally published at on

Golang Context Cancelled On Goroutine

Golang’s request context is automatically be done when passed on goroutine, and its parents goroutine is already done.

package main

import (

func foo(ctx context.Context) {
    ctx, cancel := context.WithTimeout(ctx, 60*time.Second)
    defer cancel()

    req, _ := http.NewRequestWithContext(ctx,
        http.MethodGet, "", nil)

    _, err := http.DefaultClient.Do(req)

    log.Println(err) // Get "": context canceled

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        go foo(r.Context())
    }) // context will be done when it reaches here

    http.ListenAndServe(":8888", nil)

Enter fullscreen mode Exit fullscreen mode

Top comments (0)