Go语言如何将自定义结构体切片转换为指定格式的多行字符串返回
Go 格式化Rule切片为多行字符串的实现方法
推荐两种标准库原生的高效实现方案,无需引入第三方依赖:
方案1:使用strings.Builder(推荐,适合任意长度的切片)
该方案内存分配效率高,是Go官方推荐的字符串拼接方案,代码示例如下:
import ( "fmt" "strings" ) // 入参是你的[]Rule切片,返回格式化后的多行字符串 func FormatRules(rules []Rule) string { var builder strings.Builder // 预分配足够的内存,可进一步提升性能:预估每行约30字节,按切片长度预分配 builder.Grow(len(rules) * 30) for _, rule := range rules { _, _ = fmt.Fprintf(&builder, "value:%v, tag:%v, id:%v\n", rule.Value, rule.Tag, rule.Id) } // 去掉最后一行末尾多余的换行符,若不需要可以省略这一步 return strings.TrimSuffix(builder.String(), "\n") } // 调用方式 list := FormatRules(getRules())
方案2:使用strings.Join(适合切片长度较小的场景)
该方案代码更简洁,天然不需要处理末尾换行:
import ( "fmt" "strings" ) func FormatRules(rules []Rule) string { lines := make([]string, 0, len(rules)) for _, rule := range rules { lines = append(lines, fmt.Sprintf("value:%v, tag:%v, id:%v", rule.Value, rule.Tag, rule.Id)) } return strings.Join(lines, "\n") }
注意事项
不要直接使用+=拼接字符串,Go的字符串是不可变类型,每次+=都会触发内存重新分配,切片元素较多时性能损耗非常明显。
内容的提问来源于stack exchange,提问作者user16009119
相关产品推荐
相关产品推荐

