登录
首页 >  Golang >  Go问答

将 strings.Builder 与 fmt.Sprintf 结合使用的替代方案

来源:stackoverflow

时间:2024-04-17 18:09:32 339浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《将 strings.Builder 与 fmt.Sprintf 结合使用的替代方案》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

我正在学习 go 中的 strings 包,我正在尝试构建一个简单的错误消息。

我读到 strings.builder 是一种非常有效的连接字符串的方法,并且 fmt.sprintf 让我可以进行一些字符串插值。

话虽如此,我想了解将大量字符串连接在一起的最佳方法。例如,这是我创建的:

func generateValidationErrorMessage(err error) string {
    errors := []string{}

    for _, err := range err.(validator.ValidationErrors) {
        var b strings.Builder
        b.WriteString(fmt.Sprintf("[%s] failed validation [%s]", err.Field(), err.ActualTag()))
        if err.Param() != "" {
            b.WriteString(fmt.Sprintf("[%s]", err.Param()))
        }
        errors = append(errors, b.String())
    }

    return strings.Join(errors, "; ")
}

还有其他/更好的方法吗?使用 s1 + s2 是否被认为更糟糕?


正确答案


可以使用fmt直接打印到strings.builder。使用 fmt.fprintf(&builder, "格式字符串", args)

fmt 函数以 fprint... 开头,意思是“文件打印” ",允许您打印到 io.writer,例如 os.filestrings.builder

此外,不要使用多个构建器并在末尾连接所有字符串,只需使用单个构建器并继续写入即可。如果您想添加分隔符,您可以在循环中轻松完成:

var builder strings.Builder
for i, v := range values {
    if i > 0 {
        // unless this is the first item, add the separator before it.
        fmt.Fprint(&builder, "; ")
    }
    fmt.Fprintf(&builder, "some format %v", v)
}

var output = builder.String()

理论要掌握,实操不能落!以上关于《将 strings.Builder 与 fmt.Sprintf 结合使用的替代方案》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>