func main() { h := flag.Bool("h", false, "显示帮助信息") v := flag.Bool("v", false, "显示版本信息") l := flag.Bool("l", false, "显示所有支持的语言") g := flag.Bool("g", false, "在当前目录下创建一个默认的配置文件") pprofType := flag.String("pprof", "", "指定一种调试输出类型,可以为 cpu 或是 mem") flag.Usage = usage flag.Parse() switch { case *h: flag.Usage() return case *v: fmt.Fprintln(os.Stdout, app.Name, app.Version, "build with", runtime.Version()) return case *l: fmt.Fprintln(os.Stdout, "目前支持以下语言", input.Langs()) return case *g: path, err := getConfigFile() if err != nil { app.Errorln(err) return } if err = genConfigFile(path); err != nil { app.Errorln(err) return } app.Infoln("配置内容成功写入", path) return } // 指定了 pprof 参数 if len(*pprofType) > 0 { profile := filepath.Join("./", app.Profile) f, err := os.Create(profile) if err != nil { app.Errorln(err) return } defer func() { if err := f.Close(); err != nil { app.Errorln(err) return } app.Infoln("pprof 的相关参数已经写入到", profile) }() switch strings.ToLower(*pprofType) { case "mem": defer func() { if err = pprof.Lookup("heap").WriteTo(f, 1); err != nil { app.Errorln(err) } }() case "cpu": if err := pprof.StartCPUProfile(f); err != nil { app.Errorln(err) } defer pprof.StopCPUProfile() default: app.Errorln("无效的 pprof 参数") return } } run() }
func main() { tag, err := locale.Init() if err != nil { warn.Println(err) info.Println("无法获取系统语言,使用默认的本化语言:", app.DefaultLocale) tag, err = language.Parse(app.DefaultLocale) if err != nil { erro.Println(err) return } } locale.SetLocale(tag) h := flag.Bool("h", false, locale.Sprintf(locale.FlagHUsage)) v := flag.Bool("v", false, locale.Sprintf(locale.FlagVUsage)) l := flag.Bool("l", false, locale.Sprintf(locale.FlagLUsage)) g := flag.Bool("g", false, locale.Sprintf(locale.FlagGUsage)) pprofType := flag.String("pprof", "", locale.Sprintf(locale.FlagPprofUsage)) flag.Usage = usage flag.Parse() switch { case *h: flag.Usage() return case *v: locale.Printf(locale.FlagVersionBuildWith, app.Name, app.Version, runtime.Version()) return case *l: locale.Printf(locale.FlagSupportedLangs, input.Langs()) return case *g: path, err := getConfigFile() if err != nil { erro.Println(err) return } if err = genConfigFile(path); err != nil { erro.Println(err) return } info.Println(locale.Sprintf(locale.FlagConfigWritedSuccess, path)) return } // 指定了 pprof 参数 if len(*pprofType) > 0 { profile := filepath.Join("./", app.Profile) f, err := os.Create(profile) if err != nil { // 不能创建文件,则忽略 pprof 相关操作 warn.Println(err) goto RUN } defer func() { if err = f.Close(); err != nil { erro.Println(err) return } info.Println(locale.Sprintf(locale.FlagPprofWritedSuccess, profile)) }() switch strings.ToLower(*pprofType) { case "mem": defer func() { if err = pprof.Lookup("heap").WriteTo(f, 1); err != nil { warn.Println(err) } }() case "cpu": if err := pprof.StartCPUProfile(f); err != nil { warn.Println(err) } defer pprof.StopCPUProfile() default: erro.Println(locale.Sprintf(locale.FlagInvalidPprrof)) return } } RUN: run() }