gpt4 book ai didi

golang 等待 io.Writer 被写入

转载 作者:数据小太阳 更新时间:2023-10-29 03:16:22 26 4
gpt4 key购买 nike

http.Server输入 golang 标准 net/http包中有一个名为 ErrorLog 的字段,类型为 log.Logger

这是在我的 http.Server 中设置 ErrorLog 的方式:

// set up HTTP server
server = &http.Server{
Addr: getPortFromConfig(),
Handler: handler,
ErrorLog: log.New(io.MultiWriter(stdout, fileout), "", 1),
}

所以在这里,io.MultiWriter() 函数创建了一个新的 io.Writer,它将从我的 http.Server 复制所有写入到一个文件以及标准输出。它就像一个魅力。

但是,我想拦截数据并在写入文件之前对其进行格式化。

这怎么可能?

最佳答案

您可以创建自己的 writer 来实现“Write([]byte) error”。当您创建此编写器时,您将文件编写器作为参数提供给他。每次您的编写器收到一些东西时,它都会对其进行格式化,然后调用文件编写器上的“Write”方法。像这样的东西:

type MyFormatter struct {
fileWriter io.Writer
}

func (m *MyFormatter) Write(buf []byte) error {
formattedBytes := FormatBytes(buf)
m.fileWriter.Write(formattedBytes)
}

没有测试过那个代码,它只是伪代码!

编辑:您甚至可以使用嵌入式编写器

type MyFormatter struct {
io.Writer
}

func (m *MyFormatter) Write(buf []byte) error {
formattedBytes := FormatBytes(buf)
m.Writer.Write(formattedBytes)
}

关于golang 等待 io.Writer 被写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33666836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com