在查看我同事的代码时,我发现 returnerr已被忽略,尽管我们通常不会这样做:b := new(strings.Builder)b.WriteString("Hello, World!") // ignore err的源代码WriteString声明它可能会返回错误,但实际上它永远不会(总是返回nil错误值):// WriteString appends the contents of s to b's buffer.// It returns the length of s and a nil error.func (b *Builder) WriteString(s string) (int, error) { b.copyCheck() b.buf = append(b.buf, s...) return len(s), nil}如果有的话,删除错误返回会出现什么问题,如下所示?func (b *Builder) WriteString(s string) int { b.copyCheck() b.buf = append(b.buf, s...) return len(s)}
2 回答
慕码人2483693
TA贡献1860条经验 获得超9个赞
引入的更改列表strings.Builder
包含许多关于尝试使此 API 类似于bytes.Buffer
.
例如,
毕竟,这就是 bytes.Buffer 的行为方式,我们应该是 bytes.Buffer 的子集。
查看某些功能的文档bytes.Buffer
,它提到
WriteRune 将 Unicode 代码点 r 的 UTF-8 编码附加到缓冲区,返回其长度和错误,该错误始终为 nil,但包含在内以匹配 bufio.Writer 的 WriteRune。
看起来他们基本上是在尝试设计一个类似于 Golang 标准库中其他接口的 API。尽管 always - nil
error 是多余的,但它允许Builder
匹配将接受bytes.Buffer
或的现有接口bufio.Writer
。一个这样的界面是io.StringWriter
,它看起来像
type StringWriter interface { WriteString(s string) (n int, err error)}
这里的err
返回值很有用,因为其他StringWriter
实现可能会返回错误。
qq_笑_17
TA贡献1818条经验 获得超7个赞
去吧,返回一个值和错误是很常见的。所以你可以检查错误是否为空,如果没有错误那么很容易使用返回值。换句话说,如果它从函数接收到错误,则表明调用的函数存在问题。
- 2 回答
- 0 关注
- 85 浏览
添加回答
举报
0/150
提交
取消