github.com/kotovmak/go-admin@v1.1.1/modules/service/service.go (about) 1 // Copyright 2019 GoAdmin Core Team. All rights reserved. 2 // Use of this source code is governed by a Apache-2.0 style 3 // license that can be found in the LICENSE file. 4 5 package service 6 7 type Service interface { 8 Name() string 9 } 10 11 type Generator func() (Service, error) 12 13 func Register(k string, gen Generator) { 14 if _, ok := services[k]; ok { 15 panic("service has been registered") 16 } 17 services[k] = gen 18 } 19 20 func GetServices() List { 21 var ( 22 l = make(List) 23 err error 24 ) 25 for k, gen := range services { 26 if l[k], err = gen(); err != nil { 27 panic("service initialize fail") 28 } 29 } 30 return l 31 } 32 33 var services = make(Generators) 34 35 type Generators map[string]Generator 36 37 type List map[string]Service 38 39 func (g List) Get(k string) Service { 40 if v, ok := g[k]; ok { 41 return v 42 } 43 panic("service not found") 44 } 45 46 func (g List) GetOrNot(k string) (Service, bool) { 47 v, ok := g[k] 48 return v, ok 49 } 50 51 func (g List) Add(k string, service Service) { 52 if _, ok := g[k]; ok { 53 panic("service exist") 54 } 55 g[k] = service 56 }