Skip to content

Instantly share code, notes, and snippets.

View hotafrika's full-sized avatar

Artur Siarohau hotafrika

  • Poland
View GitHub Profile
@hotafrika
hotafrika / sf_base.go
Created November 9, 2022 11:17
medium / singleflight
type NodeStat struct {
// NodeData []byte // omit it for this example
NodeID string
Timestamp time.Time
}
type App struct {}
func (a *App) GetNodeStatSync(nodeID string) (*NodeStat, error) {
collectedAt := time.Now()
@hotafrika
hotafrika / sf_1.go
Created November 9, 2022 11:19
medium / singleflight
type App struct {
g singleflight.Group
}
func (a *App) GetNodeStat(nodeID string) (*NodeStat, error) {
result, err, _ := a.g.Do(nodeID, a.getNodeStatFunc(nodeID))
if err != nil {
return nil, err
}
stat, ok := result.(*NodeStat)
@hotafrika
hotafrika / sf_2.go
Created November 9, 2022 11:21
medium / singleflight
type App struct {
g singleflight.Group
}
func (a *App) GetNodeStat(nodeID string) (*NodeStat, error) {
f := func() (interface{}, error){
return a.GetNodeStatSync(nodeID)
}
result, err, _ := a.g.Do(nodeID, f)
if err != nil {
@hotafrika
hotafrika / sf_3.go
Created November 9, 2022 11:22
medium / singleflight
type App struct {
g singleflight.Group
}
func (a *App) GetNodeStat(nodeID string) (*NodeStat, error) {
result, err, _ := a.g.Do(nodeID, func() (interface{}, error) {
return a.GetNodeStatSync(nodeID)
})
if err != nil {
return nil, err
@hotafrika
hotafrika / chi_base.go
Created November 9, 2022 11:52
medium / chi rate limiter
func main() {
router := chi.NewRouter()
router.Get("/info", infoHandler)
router.Group(func(router chi.Router) {
router.Use(authMiddleware)
router.Get("/profile", profileHandler)
router.Get("/stat", statHandler)
})
@hotafrika
hotafrika / chi_2.go
Created November 9, 2022 12:25
medium / chi rate limiter
func main() {
router := chi.NewRouter()
router.Use(httprate.LimitByIP(100, time.Minute))
router.Get("/info", infoHandler)
router.Group(func(router chi.Router) {
router.Use(httprate.Limit(20, time.Minute, httprate.WithKeyFuncs(
httprate.KeyByIP,
httprate.KeyByEndpoint,
@hotafrika
hotafrika / chi_3.go
Created November 9, 2022 13:03
medium / chi rate limiter
func main() {
router := chi.NewRouter()
router.Use(httprate.LimitByIP(100, time.Minute))
router.Get("/info", infoHandler)
router.Group(func(router chi.Router) {
router.Use(httprate.Limit(20, time.Minute, httprate.WithKeyFuncs(
httprate.KeyByIP,
httprate.KeyByEndpoint,