From abdcae31c9595aefb2e2a080e541c3e209bd295f Mon Sep 17 00:00:00 2001 From: "arraykeys@gmail.com" Date: Fri, 24 Aug 2018 11:40:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96sdk,=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=B9=B6=E5=8F=91=E5=90=AF=E5=8A=A8/=E5=85=B3=E9=97=AD?= =?UTF-8?q?=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/service.go | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/services/service.go b/services/service.go index 4a4040f..d126642 100644 --- a/services/service.go +++ b/services/service.go @@ -4,6 +4,7 @@ import ( "fmt" logger "log" "runtime/debug" + "sync" ) type Service interface { @@ -17,31 +18,31 @@ type ServiceItem struct { Log *logger.Logger } -var servicesMap = map[string]*ServiceItem{} +var servicesMap = sync.Map{} func Regist(name string, s Service, args interface{}, log *logger.Logger) { Stop(name) - servicesMap[name] = &ServiceItem{ + servicesMap.Store(name, &ServiceItem{ S: s, Args: args, Name: name, Log: log, - } + }) } func GetService(name string) *ServiceItem { - if s, ok := servicesMap[name]; ok && s.S != nil { - return s + if s, ok := servicesMap.Load(name); ok && s.(*ServiceItem).S != nil { + return s.(*ServiceItem) } return nil } func Stop(name string) { - if s, ok := servicesMap[name]; ok && s.S != nil { - s.S.Clean() + if s, ok := servicesMap.Load(name); ok && s.(*ServiceItem).S != nil { + s.(*ServiceItem).S.Clean() } } func Run(name string, args interface{}) (service *ServiceItem, err error) { - service, ok := servicesMap[name] + _service, ok := servicesMap.Load(name) if ok { defer func() { e := recover() @@ -49,6 +50,7 @@ func Run(name string, args interface{}) (service *ServiceItem, err error) { err = fmt.Errorf("%s servcie crashed, ERR: %s\ntrace:%s", name, e, string(debug.Stack())) } }() + service = _service.(*ServiceItem) if args != nil { err = service.S.Start(args, service.Log) } else {