你在使用docker命令时,是不是曾碰到过{{.XXX}}类似的写法?比如菜鸟教程网站(https://www.runoob.com/docker/docker-inspect-command.html)上的这个docker inspect命令
runoob@runoob:~$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mymysql
172.17.0.3
这个写法是由Golang的标准库template提供,这个库比较特别,因为template就像是一个“脚本语言解析器”,其中涉及到变量赋值、函数/方法调用和各种条件/循环控制结构等。在这里简单记录下练习时的一些示例,供大家参考
package main
import (
"os"
"text/template"
)
type Test struct {
Name string
}
func (Test) SayHello(words string) string {
return "Hello " + words
}
func main() {
tmpl := template.New("argument practice")
var t = Test{"Someone"}
var m = map[string]int{
"A": 1,
"AA": 2,
"AAAAA": 5,
}
// boolean value, float value and map
tmpl = template.Must(tmpl.Parse("{{false}},{{1.23}},{{.AA}}\n"))
panicIfNonNill(tmpl.Execute(os.Stdout, m))
// Method
tmpl = template.Must(tmpl.Parse(`{{.SayHello "there\n"}}`))
panicIfNonNill(tmpl.Execute(os.Stdout, t))
// function
var funcMap = template.FuncMap{
"sayHi": sayHi,
}
tmpl.Funcs(funcMap)
tmpl = template.Must(tmpl.Parse(`{{sayHi}}`))
panicIfNonNill(tmpl.Execute(os.Stdout, nil))
// variables
tmpl = template.Must(tmpl.Parse(`{{$a := "mate\n"}}{{$a}}`))
panicIfNonNill(tmpl.Execute(os.Stdout, nil))
// pipeline
tmpl = template.Must(tmpl.Parse(`{{range $key, $val := .}}{{println $key $val}}{{end}}`))
panicIfNonNill(tmpl.Execute(os.Stdout, map[string]bool{"1": true, "2": false}))
}
func panicIfNonNill(err error) {
if err != nil {
panic(err.Error())
}
}
func sayHi() string {
return "sayHi, my friend\n"
}