I have the following code:
func Call(ctx context.Context, payload Payload) (Response, error) {
req, err := http.NewRequest(...) // Some code that creates req
If you use WithCancel the goroutine will be held indefinitely in memory, however if you use WithDeadline or WithTimeout even if you don't call cancel, the goroutine will only be held until the timer expires.
This is still not best practice though, it's always best to call cancel as soon as you're done with the resource.