站点图标 星露谷值班站长

去除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()))

大佬勿喷,仅供参考~

退出移动版