为了账号安全,请及时绑定邮箱和手机立即绑定

go:使用 multiWriter 将编写器添加到 io.writer

go:使用 multiWriter 将编写器添加到 io.writer

Go
噜噜哒 2021-12-07 19:31:03
我是 Go 的新手。我有一张地图,表明哪些作家是活跃的:var writers map[int]bool我想遍历地图,并使用 multiWriter() 创建一个代表所有活动作家的作家我正在使用以下代码片段:func setupMultiLoggers() {var mw io.Writerfor k, v := range writers {    if v != true {        continue    }    switch k {    case 0:        if mw == nil {            mw = writer0        } else {            mw = io.MultiWriter(mw, writer0)        }    case 1:        if mw == nil {            mw = os.Stdout        } else {            mw = io.MultiWriter(mw, os.Stdout)        }    case 2:        if mw == nil {            mw = writer2        } else {            io.MultiWriter(mw, writer2)        }    default:    }}log.SetOutput(mw)}将映射的所有 3 个值初始化为 true 然后测试 writer2 时,它有时有效,有时无效(情况 2 中的代码始终执行)如果我只是使用log.SetOutput(io.MultiWriter(writer0, os.Stdout, writer2))它总是按预期工作。我似乎无法理解为什么我的原始代码不能可靠地工作。我有一种感觉有一种更干净的方式来“连接”作家编辑:我发现了我的(愚蠢的)错误。在第三种情况下缺少对 mw 的分配。仍在寻找一种更干净的方式来“连接”作家。
查看完整描述

2 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

您似乎没有作家地图,而是有整数到布尔值的地图。据推测,整数代表文件描述符。


最简单的方法可能是将其从 map[int]bool 更改为 map[io.Writer]bool,然后您可以遍历它们并将它们添加到带有 append 的切片中。


ws := make([]io.Writer, 0)

for k, v : = range(writers) {

    if v != true {

        continue

    }

    ws = append(ws, k)

}

之后,您可以通过将切片提供给 MultiWriter 调用来直接创建多编写器。


w := io.MultiWriter(ws...)

log.SetOutput(w)

( ...in a function parameter after a slice 意味着将切片扩展为函数调用的参数)


您可以在保留 map[int]bool 的同时做同样的事情,但是您需要一个类似于将 int 转换为 io.Writer 的开关


查看完整回答
反对 回复 2021-12-07
?
慕容3067478

TA贡献1773条经验 获得超3个赞

例如,


var writers map[int]bool


var writer0, writer2 io.Writer


func setupMultiLoggers() {

    var mw []io.Writer

    for k, v := range writers {

        if v == false {

            continue

        }

        switch k {

        case 0:

            mw = append(mw, writer0)

        case 1:

            mw = append(mw, os.Stdout)

        case 2:

            mw = append(mw, writer2)

        }

    }

    log.SetOutput(io.MultiWriter(mw...))

}


查看完整回答
反对 回复 2021-12-07
  • 2 回答
  • 0 关注
  • 274 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信