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

为什么从golang中的strings.Builder WriteString返回nil错误

为什么从golang中的strings.Builder WriteString返回nil错误

Go
手掌心 2022-10-17 19:43:53
在查看我同事的代码时,我发现 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 - nilerror 是多余的,但它允许Builder匹配将接受bytes.Buffer或的现有接口bufio.Writer。一个这样的界面是io.StringWriter,它看起来像

type StringWriter interface {
    WriteString(s string) (n int, err error)}

这里的err返回值很有用,因为其他StringWriter实现可能会返回错误。


查看完整回答
反对 回复 2022-10-17
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

去吧,返回一个值和错误是很常见的。所以你可以检查错误是否为空,如果没有错误那么很容易使用返回值。换句话说,如果它从函数接收到错误,则表明调用的函数存在问题。



查看完整回答
反对 回复 2022-10-17
  • 2 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

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