去除go模板渲染时产生的空行

最近写一个本地渲染配置的小工具,使用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()))

大佬勿喷,仅供参考~