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

在查看我同事的代码时,我发现 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)

}


手掌心
浏览 87回答 2
2回答

慕码人2483693

引入的更改列表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实现可能会返回错误。

qq_笑_17

去吧,返回一个值和错误是很常见的。所以你可以检查错误是否为空,如果没有错误那么很容易使用返回值。换句话说,如果它从函数接收到错误,则表明调用的函数存在问题。
打开App,查看更多内容
随时随地看视频慕课网APP