Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
snail007
GitHub Repository: snail007/goproxy
Path: blob/master/services/service.go
686 views
1
package services
2
3
import (
4
"fmt"
5
"log"
6
"runtime/debug"
7
)
8
9
type Service interface {
10
Start(args interface{}) (err error)
11
Clean()
12
}
13
type ServiceItem struct {
14
S Service
15
Args interface{}
16
Name string
17
}
18
19
var servicesMap = map[string]*ServiceItem{}
20
21
func Regist(name string, s Service, args interface{}) {
22
servicesMap[name] = &ServiceItem{
23
S: s,
24
Args: args,
25
Name: name,
26
}
27
}
28
func Run(name string) (service *ServiceItem, err error) {
29
service, ok := servicesMap[name]
30
if ok {
31
go func() {
32
defer func() {
33
err := recover()
34
if err != nil {
35
log.Fatalf("%s servcie crashed, ERR: %s\ntrace:%s", name, err, string(debug.Stack()))
36
}
37
}()
38
err := service.S.Start(service.Args)
39
if err != nil {
40
log.Fatalf("%s servcie fail, ERR: %s", name, err)
41
}
42
}()
43
}
44
if !ok {
45
err = fmt.Errorf("service %s not found", name)
46
}
47
return
48
}
49
50