Filter out broken pipe errors

戏子无情 提交于 2019-12-01 15:58:50

The broken pipe error is defined in the syscall package. You can use the equality operator to compare the error to the one in syscall. Check http://golang.org/pkg/syscall/#constants for a complete list of syscall errors. Search "EPIPE" on the page and you will find all the defined errors grouped together.

if err == syscall.EPIPE {
    /* ignore */
}

If you wish to get the actual errno number (although it is pretty useless) you can use a type assertion:

if e, ok := err.(syscall.Errno); ok {
    errno = uintptr(e)
}

As of go 1.13, you can use errors.Is instead of type assertions.

if errors.Is(err, syscall.EPIPE) {
  // broken pipe
}

Having all but an error interface is enough to perform a type assertion or a type switch to reveal the concrete type held by the interface.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!