Context and Cancellation
Cancellation Branch
A select can branch between a canceled context and a default path.
Cancellation Branch
cancellation_branch.go
package main
import (
"context"
"fmt"
)
func main() {
var cancelNow =
ctx, cancel := context.WithCancel(context.Background())
if cancelNow {
cancel()
}
status := ""
select {
case <-ctx.Done():
status = "canceled"
default:
status = "still running"
}
fmt.Println("cancelNow=", cancelNow)
fmt.Println("status=", status)
fmt.Println("hasError=", ctx.Err() != nil)
}
package main
import (
"context"
"fmt"
)
func main() {
var cancelNow =
ctx, cancel := context.WithCancel(context.Background())
if cancelNow {
cancel()
}
status := ""
select {
case <-ctx.Done():
status = "canceled"
default:
status = "still running"
}
fmt.Println("cancelNow=", cancelNow)
fmt.Println("status=", status)
fmt.Println("hasError=", ctx.Err() != nil)
}
done channel
`ctx.Done()` is a channel that becomes ready after cancellation.