戈朗。帮助优化一段代码

标签 go

我有密码

if config.Process.TraceLog != "" {
    f, err := os.OpenFile(config.Process.TraceLog, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)

    if err != nil {
        fmt.Println("error opening log file: %v", err)
        os.Exit(1)
    }

    Trace.SetOutput(f)
}

if config.Process.InfoLog != "" {
    f, err := os.OpenFile(config.Process.InfoLog, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)

    if err != nil {
        fmt.Println("error opening log file: %v", err)
        os.Exit(1)
    }

    Info.SetOutput(f)
}
if config.Process.WarningLog != "" {
    f, err := os.OpenFile(config.Process.WarningLog, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)

    if err != nil {
        fmt.Println("error opening log file: %v", err)
        os.Exit(1)
    }
    Warning.SetOutput(f)
}

if config.Process.ErrorLog != "" {
    f, err := os.OpenFile(config.Process.ErrorLog, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)

    if err != nil {
        fmt.Println("error opening log file: %v", err)
        os.Exit(1)
    }

    Error.SetOutput(f)
}
  1. 缩短它的好方法是什么?我不想重复相同的非常相似的 block 4 次。

  2. 如何循环?我尝试用文件名和记录器对象创建 map ,但不知道如何正确发布引用

最佳答案

我终于做到了

m := map[string]*log.Logger{
    config.Process.TraceLog:   Trace,
    config.Process.InfoLog:    Info,
    config.Process.WarningLog: Warning,
    config.Process.ErrorLog:   Error,
}
for filepath, l := range m {
    if filepath != "" {
        f, err := os.OpenFile(filepath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)

        if err != nil {
            fmt.Println("error opening log file: %v", err)
            os.Exit(1)
        }
        l.SetOutput(f)
    }
}

关于戈朗。帮助优化一段代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39179083/

相关文章:

string - 在 Go 中将自定义类型转换为字符串

amazon-web-services - goamz/sqs/md5.go :57: undefined: md5. 求和问题

postgresql - 为什么我在插入 postgres 后得到 ErrNoRows ("sql: no rows in result set"),即使插入实际上是成功的?

go - 我们如何在 golang 中停止 bufio 扫描?

go - 键盘或管道文件输入

go - 在不加载内存的情况下在 Golang 中爬行

memory - 原子操作是否建立了先行关系?

windows - panic : net: inconsistent fdMutex

go - 从 C 代码调用 Go 库

go - Paho MQTT golang 用于多个模块?