Python里面的字符串格式化,非常方便,像:

1
2
print("{key} 的值是:{value}".format(key="test", value="bbb"))
print("{test['a']} xxoo {test['b']}".format(test={"a": 123, "b":456}))

然而Golang里面的字符串格式化好像就实现不了这种功能,但是我们可以用template来封装达到效果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 模板定义
tepl := "{{ .key }} 的值是:{{ .value }} \n{{ .test.a }} xxoo {{ .test.b }}"

// 解析模板
tmpl, err := template.New("test").Parse(tepl)

// 数据驱动模板
data := map[string]int{"a": 123, "b":456}
key := "test"
value:="bbb"
err = tmpl.Execute(os.Stdout, map[string]interface{}{
"key": key,
"value": value,
"test": data
})

貌似也能达到效果,下一步我把模板格式化后的结果存进变量:

tmpl.Execute
1
2
3
func (t *Template) Execute(wr io.Writer, data interface{}) error {
return t.execute(wr, data)
}
io.Writer

看下标准库哪些库可以用:

1
2
3
4
5
6
7
8
9
10
- os.File 同时实现了io.Reader和io.Writer
- strings.Reader 实现了io.Reader
- bufio.Reader/Writer 分别实现了io.Reader和io.Writer
- bytes.Buffer 同时实现了io.Reader和io.Writer
- bytes.Reader 实现了io.Reader
- compress/gzip.Reader/Writer 分别实现了io.Reader和io.Writer
- crypto/cipher.StreamReader/StreamWriter 分别实现了io.Reader和io.Writer
- crypto/tls.Conn 同时实现了io.Reader和io.Writer
- encoding/csv.Reader/Writer 分别实现了io.Reader和io.Writer
- mime/multipart.Part 实现了io.Reader

试试用bytes.Buffer:

1
2
3
4
5
6
7
var cmd bytes.Buffer
err = tmpl.Execute(&cmd, map[string]interface{}{
"key": key,
"value": value,
"test": data
})
fmt.Println(cmd.String())

阔以了