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  }