共计 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())) |
大佬勿喷,仅供参考~
正文完