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

从模板执行中过滤掉断管错误

从模板执行中过滤掉断管错误

Go
慕姐8265434 2021-08-30 14:38:49
这类似于Filter out Broken pipe errors,但有一些复杂性 - 当用户在模板执行时按下浏览器上的“停止”按钮(html/template.Execute 或 text/template.Execute),会发生管道损坏错误.但是,我相信 text/template 包返回的错误只是 *errors.errorString 类型,因为损坏的管道消息似乎包含在其他一些信息文本中,因此无法对 net.OpErr 进行类型断言以进行比较目的。例如,典型的断管错误字符串看起来像write tcp 127.0.0.1:60739: broken pipe执行模板返回的管道损坏错误字符串如下所示:template: header.html:1:0: executing "header.html" at <div id="header...>: write tcp 127.0.0.1:60739: broken pipe我有一个用 Go 编写的生产 Web 应用程序,并且厌倦了在我的其余错误日志中从视觉上过滤掉破损的管道错误,但现在我不知道除了使用像 strings.Contains 这样的脏东西之外如何过滤掉破损的管道。
查看完整描述

2 回答

?
呼啦一阵风

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

只是要发布最终成为对我有用的包装器。如果有人看到任何错误,请随时提出。


type templateWriter struct {

    writer io.Writer

}


func (w templateWriter) Write(p []byte) (int, error) {

    n, err := w.writer.Write(p)

    if err != nil {

        // Filter out broken pipe (user pressed "stop") errors

        if nErr, ok := err.(*net.OpError); ok {

            if nErr.Err == syscall.EPIPE {

                return n, nil

            }

        }

    }

    return n, err

}


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

添加回答

举报

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