我正在编写一个服务器,我想处理来自conn.Read()的错误。具体来说,我想在客户端关闭连接的情况下不做任何事情,但如果是任何其他错误则记录错误。我遇到了以下问题:
所以基本上我必须对“EOF”进行字符串比较,以判断我的错误是预期还是真正的错误?!?我错过了什么吗?因为这看起来像是一个巨大的疏忽......
答案 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”)。