如何检查Go中的特定网络错误?

时间:2014-07-22 09:42:21

标签: go

我正在编写一个服务器,我想处理来自conn.Read()的错误。具体来说,我想在客户端关闭连接的情况下不做任何事情,但如果是任何其他错误则记录错误。我遇到了以下问题:

  1. 文档似乎没有说出conn.Read()可以返回的错误。
  2. Connection-by-client似乎是一个EOF错误。原来它的类型是error.errorString。严重?
  3. 所以基本上我必须对“EOF”进行字符串比较,以判断我的错误是预期还是真正的错误?!?我错过了什么吗?因为这看起来像是一个巨大的疏忽......

1 个答案:

答案 0 :(得分:2)

嗯,不,它是string,因为it's defined

import "errors"
...
var EOF = errors.New("EOF")

以及errors.New(string)返回的内容实际上是可转换为string的类型,因为该类型errorString仅嵌入您传递给error.New(string)的字符串,其唯一目的是在其上定义Error() string方法 - 以满足error接口。

但是你测试了这个特定的错误(文件结束),如下所示:

import "io"
...
if err == io.EOF {
...

也就是说,你不是在比较字符串,而是比较某个库模块导出的一个众所周知的变量的地址(在这种情况下是“io”)。