I am very new to golang. I have some handlers that make use of go’s http package. Go version is 1.6.x. Before a handler gets executed, there are some filter operations which may perform operations like rate limit. And the rate limit do some leaky bucket checking, so there is a queue like list and each handler will check and register its timestamp to redis.
Now I know that each handler is handled by go routine as mentioned by [1]. So I am thinking when the handler is accomplished its execution, I can cleanup its related info from redis. However I check online, I do not find doc mentioning how to perform post-operation.
The only info I found so far is [2] where seemingly I can use channel to receive notification by spawning a go routine for cleanup. Is this the only way to do that. If so, it seems that I need to insert such cleanup function to all endpoints/ handlers I have. If there are 100 endpoints/ handlers, I need to insert 100 lines to the end of all those handlers/ endpoints. Is there better way to do this? Thanks
There is a way that I use on my websites. Dynamic way, sort of. This has served a static site for a couple of years. The endpoint variable is created from r.URL.Path and if there is no html page, it serves a 404 page. https://static.go4webdev.org/server This code serves about 50 endpoints.
There is another approach to store this instead redis, like algorithm Token Bucket, you can use this package for this: https://github.com/didip/tollbooth
How are you performing these operations before the handler is executed? If it’s with some sort of wrapper around the goroutines, can you just add a call to cleanup the related data in redis to after the handler gets called?