共计 986 个字符,预计需要花费 3 分钟才能阅读完成。
最近写一个本地渲染配置的小工具,使用 go 自带的 ”text/template” 库进行渲染,但是渲染之后会产生空行,其实也影响不大,但是为了美观,还是研究了一下怎么去除空行。
刚开始我以为这个很简单,网上搜了很多教程发现最后渲染出来的效果都不好。
去除模板标签产生的空行可以在渲染标签里面加 -,比如 {{.Server_name -}},左右不同的 - 代表删除之前或之后,这样做比较固定的模板场景下是没有问题的,在 if else 比较多的情况下还是会产生空行或者格式缩进错误。
还有一种方法就是替换,这样出来的效果也是格式错乱 ……
str := "welcome to bai\ndu\n.com"
// 去除空格
str = strings.Replace(str, "","", -1)
// 去除换行符
str = strings.Replace(str, "\n", "", -1)
最终经过调试发现这样处理格式不会错乱而且还能去除空行。
buf := new(bytes.Buffer)
if err := res_template.Execute(buf, data); err != nil { // 渲染
fmt.Println(err)
}
output := buf.String()
for _, line := range strings.Split(output, "\n") {if len(strings.TrimSpace(line)) != 0 {fmt.Println(line)
}
}
可以写成一个工具函数调用,处理起来更方便
package tools
import ("strings")
func TrimSpace(text string) string {result := make([]string, 0)
for _, line := range strings.Split(text, "\n") {if len(strings.TrimSpace(line)) != 0 {result = append(result, line)
}
}
return strings.Join(result, "\n")
}
调用
buf := new(bytes.Buffer)
if err := res_template.Execute(buf, data); err != nil { // 渲染
fmt.Println(err)
}
fmt.Println(tools.TrimSpace(buf.String()))
大佬勿喷,仅供参考~
正文完