From d4cc335fbf89b31cdcf3fcafc84f8df1bc29d807 Mon Sep 17 00:00:00 2001 From: YGXB_net Date: Mon, 27 Apr 2026 21:43:37 +0800 Subject: [PATCH] =?UTF-8?q?refactor(app):=20=E9=87=8D=E6=9E=84=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E7=8A=B6=E6=80=81=E7=AE=A1=E7=90=86=E5=92=8C=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=B8=B8=E9=87=8F=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将全局变量 isRun 移动到 App 结构体内部作为实例字段 - 在 config.go 中定义配置键名为常量,提高代码可维护性 - 使用结构体实例字段替代全局变量管理上传状态 - 修改 StartLooking 函数中的上下文取消处理逻辑 - 移除上传程序退出日志的重复记录 --- app.go | 12 +++++++----- internal/config/config.go | 21 +++++++++++++++------ internal/uploader/uploader.go | 23 ++++++++++++++--------- 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/app.go b/app.go index 67803c6..a0b3cc9 100644 --- a/app.go +++ b/app.go @@ -16,10 +16,9 @@ type App struct { logChan chan string uploaderCTX context.Context uploaderCancel context.CancelFunc + isRun bool } -var isRun = false - func NewApp() *App { return &App{} } @@ -40,8 +39,8 @@ func (a *App) startup(ctx context.Context) { a.uploaderCTX, a.uploaderCancel = context.WithCancel(a.ctx) if config.APPConfig.IsRunOnStart { time.Sleep(time.Second) - isRun = true go uploader.StartLooking(a.uploaderCTX, &a.logChan, config.APPConfig.CheckDir) + a.isRun = true } } @@ -62,15 +61,18 @@ func (a *App) WriteConfig(key string, value any) { } func (a *App) StartUpload() { - if isRun { + if a.isRun { return } a.uploaderCTX, a.uploaderCancel = context.WithCancel(a.ctx) go uploader.StartLooking(a.uploaderCTX, &a.logChan, config.APPConfig.CheckDir) + a.isRun = true } func (a *App) StopUpload() { - if isRun { + if a.isRun { a.uploaderCancel() } + a.isRun = false + uploader.AddLog(&a.logChan, "上传程序已退出") } diff --git a/internal/config/config.go b/internal/config/config.go index b16c876..223362d 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -18,6 +18,15 @@ type Config struct { var APPConfig Config +const ( + Url = "url" + Token = "token" + ThreadCount = "thread-count" + HandleFileCount = "handle-file-count" + IsRunOnStart = "is-run-on-start" + CheckDir = "check-dir" +) + func InitConfig() { // 设置默认配置 defaultConfig := Config{ @@ -28,12 +37,12 @@ func InitConfig() { IsRunOnStart: false, CheckDir: "", } - viper.SetDefault("url", defaultConfig.Url) - viper.SetDefault("token", defaultConfig.Token) - viper.SetDefault("thread-count", defaultConfig.ThreadCount) - viper.SetDefault("handle-file-count", defaultConfig.HandleFileCount) - viper.SetDefault("is-run-on-start", defaultConfig.IsRunOnStart) - viper.SetDefault("looking-path", defaultConfig.CheckDir) + viper.SetDefault(Url, defaultConfig.Url) + viper.SetDefault(Token, defaultConfig.Token) + viper.SetDefault(ThreadCount, defaultConfig.ThreadCount) + viper.SetDefault(HandleFileCount, defaultConfig.HandleFileCount) + viper.SetDefault(IsRunOnStart, defaultConfig.IsRunOnStart) + viper.SetDefault(CheckDir, defaultConfig.CheckDir) //设置配置文件名和路径 ./config.toml viper.AddConfigPath(".") diff --git a/internal/uploader/uploader.go b/internal/uploader/uploader.go index 90d544c..0ec4af2 100644 --- a/internal/uploader/uploader.go +++ b/internal/uploader/uploader.go @@ -33,17 +33,23 @@ type Progress struct { } func StartLooking(ctx context.Context, logChan *chan string, lookingPath string) { + //推送上传进度 go func() { for { - time.Sleep(500 * time.Millisecond) + select { + case <-ctx.Done(): + return + default: + time.Sleep(500 * time.Millisecond) - var pg []Progress - progress.Range(func(key, value any) bool { - p := value.(Progress) - pg = append(pg, p) - return true - }) - runtime.EventsEmit(ctx, "progress", pg) + var pg []Progress + progress.Range(func(key, value any) bool { + p := value.(Progress) + pg = append(pg, p) + return true + }) + runtime.EventsEmit(ctx, "progress", pg) + } } }() @@ -52,7 +58,6 @@ func StartLooking(ctx context.Context, logChan *chan string, lookingPath string) select { case <-time.After(time.Minute): case <-ctx.Done(): - AddLog(logChan, "上传程序已退出") return } }