1 回答

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊
您的程序失敗的原因之一是您正在復(fù)制不允許的非零strings.Builder
實(shí)例。
Builder 用于使用 Write 方法有效地構(gòu)建字符串。它最大限度地減少了內(nèi)存復(fù)制。零值即可使用。不要復(fù)制非零構(gòu)建器。
另外,我在這里可能是錯(cuò)的,但我相信構(gòu)建器的目的是在處理足夠復(fù)雜的規(guī)則時(shí)提供更好的性能,其中使用大量單獨(dú)的步驟來構(gòu)建字符串是合理的。然而,您的情況不是其中之一,因?yàn)槟枰闹皇且粋€(gè)串聯(lián)即可獲得您想要的東西。
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
此外,如果配置屬性的數(shù)量增加并且您希望避免編寫太多 if-else,那么您始終可以將該邏輯提取到函數(shù)中。
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 關(guān)注
- 168 瀏覽
添加回答
舉報(bào)