| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- package router
- import (
- "context"
- "sync"
- )
- type Router interface {
- Pick(ctx context.Context) (string, bool)
- }
- type defaultRouter byte
- func (defaultRouter) Pick(ctx context.Context) (string, bool) {
- return "", false
- }
- type syncRouter struct {
- sync.RWMutex
- Router
- }
- func (r *syncRouter) Pick(ctx context.Context) (string, bool) {
- r.RLock()
- defer r.RUnlock()
- return r.Router.Pick(ctx)
- }
- func (r *syncRouter) Set(router Router) {
- r.Lock()
- defer r.Unlock()
- r.Router = router
- }
- var (
- routerInstance = &syncRouter{
- Router: defaultRouter(0),
- }
- )
- func RegisterRouter(router Router) {
- if router == nil {
- panic("Router is nil.")
- }
- routerInstance.Set(router)
- }
- func Pick(ctx context.Context) (string, bool) {
- return routerInstance.Router.Pick(ctx)
- }
|