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.