Because dozens of in between layers don't need to know the type, and should in fact work regardless of the specific type.
Context tells you enough: someone, somewhere may do magic with this if you pass it down the chain.
And in good Go tradition it's explicit about this: functions that don't take a context don't (generally) do that kind of magic.
If anything it mixes two concerns: cancelation and dynamic scoping.
But I'm not sure having two different parameters would be better.