最近写一个本地渲染配置的小工具,使用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()))
大佬勿喷,仅供参考~