// Copyright 2019 GoAdmin Core Team. All rights reserved. | |
// Use of this source code is governed by a Apache-2.0 style | |
// license that can be found in the LICENSE file. | |
package service | |
import ( | |
"log" | |
) | |
type Service interface { | |
Name() string | |
} | |
type Generator func() (Service, error) | |
func Register(k string, gen Generator) { | |
if _, ok := services[k]; ok { | |
log.Panicf("service %s has been registered", k) | |
} | |
services[k] = gen | |
} | |
func GetServices() List { | |
var ( | |
l = make(List) | |
err error | |
) | |
for k, gen := range services { | |
if l[k], err = gen(); err != nil { | |
log.Panicf("service %s initialize fail, error: %v", k, err) | |
} | |
} | |
return l | |
} | |
var services = make(Generators) | |
type Generators map[string]Generator | |
type List map[string]Service | |
func (g List) Get(k string) Service { | |
if v, ok := g[k]; ok { | |
return v | |
} | |
log.Panicf("service %s not found", k) | |
return nil | |
} | |
func (g List) GetOrNot(k string) (Service, bool) { | |
v, ok := g[k] | |
return v, ok | |
} | |
func (g List) Add(k string, service Service) { | |
if _, ok := g[k]; ok { | |
log.Panicf("service %s exist", k) | |
} | |
g[k] = service | |
} | |