1 回答
TA贡献2012条经验 获得超12个赞
您的程序失败的原因之一是您正在复制不允许的非零strings.Builder
实例。
Builder 用于使用 Write 方法有效地构建字符串。它最大限度地减少了内存复制。零值即可使用。不要复制非零构建器。
另外,我在这里可能是错的,但我相信构建器的目的是在处理足够复杂的规则时提供更好的性能,其中使用大量单独的步骤来构建字符串是合理的。然而,您的情况不是其中之一,因为您所需要的只是一个串联即可获得您想要的东西。
type Cfg struct { A, B string }
func getShCfg(c Cfg) string {
var out []string
la := "l_sh_dit conf_data 7MB"
lb := "l_sh_dit cert_data 3MB"
if len(c.A) > 0 {
out = append(out, "l_sh_dit conf_data " + c.A)
} else {
out = append(out, la)
}
if len(c.B) > 0 {
out = append(out, "l_sh_dit cert_data "+c.B)
} else {
out = append(out, lb)
}
return strings.Join(out, ";\n\r") + ";"
}
https://play.golang.com/p/WKMXxCXGuTt
此外,如果配置属性的数量增加并且您希望避免编写太多 if-else,那么您始终可以将该逻辑提取到函数中。
func getCfgProp(key, val, def string) string {
if len(val) > 0 {
return key + " " + val
}
return key + " " + def
}
https://play.golang.com/p/daXqV4-Umza
- 1 回答
- 0 关注
- 135 浏览
添加回答
举报