Here is a simple solution. Write some middleware that will wrap your http.Handlers.
In order to handle at most 100 requests the middleware needs to have access to a channel with a buffer size of 100 (I'll call it x) and do the following:
1. Send to x
2. Defer a receive from x.
3. Run the original http.Handler
If at any point x's buffer comes full (at 100 concurrently running handlers), step 1 will block and wait until a handler finishes and receives from x.
If you want to view the queue of work you'd need a different solution. I'm not aware of an existing open source solution.