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 關注
- 170 瀏覽
添加回答
舉報