package utils import ( "os" "path/filepath" "sync" "github.com/iwind/TeaGo/Tea" ) type ServiceManager struct { Name string Description string onceLocker sync.Once } func NewServiceManager(name, description string) *ServiceManager { manager := &ServiceManager{ Name: name, Description: description, } manager.resetRoot() return manager } func (m *ServiceManager) setup() { m.onceLocker.Do(func() {}) } func (m *ServiceManager) resetRoot() { if !Tea.IsTesting() { exePath, err := os.Executable() if err != nil { exePath = os.Args[0] } link, err := filepath.EvalSymlinks(exePath) if err == nil { exePath = link } fullPath, err := filepath.Abs(exePath) if err == nil { Tea.UpdateRoot(filepath.Dir(filepath.Dir(fullPath))) } } }