使用配置中的值更新字符串数组

我有以下函数,需要在两个选项中提供带有数据的字符串

  1. 提供了配置中的值(只能更改7MB或 的值3MB)所有前缀都是相同的

  2. 如果未提供配置,则回退到默认值,7MB 并且3MB

例子

如果我没有从配置 API 中获取任何值,该函数应该返回默认值,该值是硬编码在函数中的。像这样:

“l_sh_dit conf_data 7MB
 l_sh_dit cert_data 3MB”

如果我从应用程序中获得价值,config假设分别为 1MB(conf)和 100MB(cert),则该函数的输出应该看起来像 l

“l_sh_dit conf_data 1MB
 l_sh_dit cert_data 100MB”

问题是我已经有了defaultshard-coded,如何才能element有效地更新数组中的每个值中的最后一个值(数字 10M 或所有其他值)?

我尝试过使用字符串生成器 API,但没有成功,因为这有点棘手,这里可能缺少什么?

func getShCfg() string{


var out []string


var b1 strings.Builder



la:= "l_sh_dit conf_data 7MB"

lb := "l_sh_dit cert_data 3MB"


cfg, ok := c.(config.Configuration)


if !ok {

    log.Errorf(“error:”, c)

    return ""

}


// here I got the data from config, else fallback to defaults 

if len(cfg.A) > 0 {


   // HERE is my problem which doesn’t works

   b1.WriteString("l_sh_dit")

   b2 := b1

   b2.WriteString("conf_data") 

   b3 := b2

   b3.WriteString(cfg.A) 


   out = append(out, b3)

} else {

    out = append(out, la)

}



// here I got the data from config, else fallback to defaults 

if len(cfg.B) > 0 {

   // HERE is my problem which doesn’t works

   b1.WriteString("l_sh_dit")

   b2 := b1

   b2.WriteString("cert_data") 

   b3 := b2

   b3.WriteString(cfg.B) 

   out = append(out, b3)


} else {

    out = append(out, lb)

}


return strings.Join(out, ";\n\r") + ";"


}


慕工程0101907
浏览 136回答 1
1回答

繁花如伊

您的程序失败的原因之一是您正在复制不允许的非零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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go