// 真正的程序入口,main 主要是作参数的处理。 func run() { start := time.Now() path, err := getConfigFile() if err != nil { erro.Println(err) return } cfg, err := loadConfig(path) if err != nil { erro.Println(err) return } // 比较版本号兼容问题 compatible, err := version.SemVerCompatible(app.Version, cfg.Version) if err != nil { erro.Println(err) return } if !compatible { erro.Println(locale.Sprintf(locale.VersionInCompatible)) return } // 分析文档内容 docs := doc.New() wg := &sync.WaitGroup{} for _, opt := range cfg.Inputs { wg.Add(1) go func(o *input.Options) { if err := input.Parse(docs, o); err != nil { erro.Println(err) } wg.Done() }(opt) } wg.Wait() if len(docs.Title) == 0 { docs.Title = app.DefaultTitle } // 输出内容 cfg.Output.Elapsed = time.Now().Sub(start) if err := output.Render(docs, cfg.Output); err != nil { erro.Println(err) return } info.Println(locale.Sprintf(locale.Complete, cfg.Output.Dir, time.Now().Sub(start))) }
// 真正的程序入口,main 主要是作参数的处理。 func run() { start := time.Now() path, err := getConfigFile() if err != nil { app.Errorln(err) return } cfg, err := loadConfig(path) if err != nil { app.Errorln(err) return } // 比较版本号兼容问题 compatible, err := version.SemVerCompatible(app.Version, cfg.Version) if err != nil { app.Errorln(err) return } if !compatible { app.Errorln("当前程序与配置文件中指定的版本号不兼容") return } // 分析文档内容 docs := doc.New() wg := &sync.WaitGroup{} for _, opt := range cfg.Inputs { wg.Add(1) go func(o *input.Options) { if err := input.Parse(docs, o); err != nil { app.Errorln(err) } wg.Done() }(opt) } wg.Wait() if len(docs.Title) == 0 { docs.Title = app.DefaultTitle } // 输出内容 cfg.Output.Elapsed = time.Now().Sub(start) if err := output.Render(docs, cfg.Output); err != nil { app.Errorln(err) return } app.Infoln("完成!文档保存在", cfg.Output.Dir, "总用时", time.Now().Sub(start)) }