美文网首页各种服务器
Go template详解(中)- 变量使用、if语句、迭代(数

Go template详解(中)- 变量使用、if语句、迭代(数

作者: 玄德公笔记 | 来源:发表于2022-08-30 20:23 被阅读0次

    @[toc]

    5. 变量

    5.1 变量使用

    • 代码
    package main
    
    import (
        "os"
        "text/template"
    )
    
    func main() {
        t := template.New("xiShu")
        t = template.Must(t.Parse(
    `{{range $x := . }}
        {{- println $x}}
        {{- end}}`))
        s := []string{"LiuBei","GuanYu","ZhangFei"}
        t.Execute(os.Stdout, s)
    }
    
    • 结果显示
    LiuBei
    GuanYu
    ZhangFei
    

    5.2 $

    $是 顶级作用域对象,将整个作用域对象作为了一个变量

    package main
    
    import (
        "os"
        "text/template"
    )
    
    func main() {
        t := template.New("xiShu")
        t = template.Must(t.Parse(
        `{{- println $ }}`))
        s := []string{"LiuBei","GuanYu","ZhangFei"}
        t.Execute(os.Stdout, s)
    }
    
    • 结果显示
    [LiuBei GuanYu ZhangFei]
    

    如上可见,{{- println $ }} 将作用域对象打印了一遍。

    6. if语句

    • 语法
    {{if condition}} command {{end}}
    {{if condition-01}} command-01 {{else}} command-02 {{end}}
    {{if condition-01}} command-01 {{else if condition-02}} command-02 {{end}}
    
    • 示例
    package main
    
    import (
        "os"
        "text/template"
    )
    
    func main() {
        t := template.New("xiShu")
        t = template.Must(t.Parse(
        `{{- range  . }} 
    {{ println . }}
    {{- if   eq . "LiuBei" }}status: king {{- else}}status: minister {{end}}
    {{end}}`))
        s := []string{"LiuBei","GuanYu","ZhangFei"}
        t.Execute(os.Stdout, s)
    }
    
    • 输出
    LiuBei
    status: king
     
    GuanYu
    status: minister 
     
    ZhangFei
    status: minister 
    

    7. 迭代

    实际前边的示例我们已经使用过了

    7.1 迭代数组或切片

    • 完整代码
    package main
    
    import (
        "os"
        "text/template"
    )
    
    
    func main() {
        nameList := []string{"GuanYu","ZhangFei","ZhaoYun"}
        t := template.New("xiShu")
        t = template.Must(t.Parse(
        `{{ range  . }} {{- println . }} {{- end}}`))
    
        _ = t.Execute(os.Stdout, nameList)
    }
    
    • 输出
    GuanYu
    ZhangFei
    ZhaoYun
    

    7.2 迭代 map

    7.2.1 仅处理值

    • 语法示例
    `{{ range $value := . }} {{- println $value }} {{- end}}`
    
    • 完整示例
    package main
    
    import (
        "os"
        "text/template"
    )
    
    
    func main() {
        nameList := map[string]string{"first":"GuanYu","second":"ZhangFei","third":"ZhaoYun"}
        t := template.New("xiShu")
        t = template.Must(t.Parse(
        `{{ range $value := . }} {{- println $value }} {{- end}}`))
    
        _ = t.Execute(os.Stdout, nameList)
    }
    
    • 输出
    GuanYu
    ZhangFei
    ZhaoYun
    

    7.2.2 处理 key和值

    • 语法示例
    `{{ range $key,$value := . }} {{- println $key "-" $value }} {{- end}}`
    
    • 完整示例
    package main
    
    import (
        "os"
        "text/template"
    )
    
    
    func main() {
        nameList := map[string]string{"first":"GuanYu","second":"ZhangFei","third":"ZhaoYun"}
        t := template.New("xiShu")
        t = template.Must(t.Parse(
        `{{ range $key,$value := . }} {{- println $key "-" $value }} {{- end}}`))
    
        _ = t.Execute(os.Stdout, nameList)
    }
    
    • 结果显示
    first - GuanYu
    second - ZhangFei
    third - ZhaoYun
    

    8. 内置函数

    8.1 比较

    内置函数 说明
    eq 等于 {{if eq xy}}
    ne 不等于 {{if ne xy}}
    lt 小于 {{if lt xy}}
    le 小于等于 {{if le xy}}
    gt 大于 {{if gt xy}}
    ge 大于等于 {{if ge xy}}
    • 示例
    package main
    
    import (
        "os"
        "text/template"
    )
    
    
    func main() {
        nameList := "a"
        t := template.New("xiShu")
        t = template.Must(t.Parse(`
    {{- if ge 5 3 }} {{- println true}} {{- else }} {{- println false}} {{end}}
    {{- if ne 5 3 }} {{- println true}} {{- else }} {{- println false}} {{end}}
    {{- if eq "hello" "Hello" }} {{- println true}} {{- else }} {{- println false}} {{end}}
    `))
    
        _ = t.Execute(os.Stdout, nameList)
    }
    

    结果显示

    true
    true
    false
    

    8.2 逻辑判断

    假: false,0
    真:true , !0

    内置函数 说明 示例
    and 和(一个假则假,真返回最后一个真值) {{and true false true }}
    or 或(一个真则真,真返回第一个真值) {{or 5 0 2}}
    not {{not true}}

    关于andor返回的真值很好理解:

    • and判断到最后一个值才能知道结果为真,因此真返回最后一个值。
    • or 判断到第一个真值则可断定结果为真,因此返回第一个真值。
    • 示例
    package main
    
    import (
        "os"
        "text/template"
    )
    
    
    func main() {
        nameList := "a"
        t := template.New("xiShu")
        t = template.Must(t.Parse(
        `{{- and 1 2 3 }} : and 全是真才真,返回最后一个真值
    {{ and 1 0 3 }} : and 一个假则假,返回假
    {{ or false false false }}  : or 全是假才假,返回假
    {{ or 1 0 3 }}  : or 一个真则真,返回第一个真值
    {{not 5}}  : not 真假取反
    {{not 0}}  : not 真假取反
    `))
    
        _ = t.Execute(os.Stdout, nameList)
    }
    

    结果显示

    3 : and 全是真才真,返回最后一个真值
    0 : and 一个假则假,返回假
    false  : or 全是假才假,返回假
    1  : or 一个真则真,返回第一个真值
    false  : not 真假取反
    true  : not 真假取反
    

    8.3 其他

    内置函数 说明 示例
    print 打印 {{- print "liuBei"}}
    printf 格式输出 {{- printf "%d" $i}}
    println 换行输出 {{- println $i}}
    len 字串/数组长度 {{ $l := len "liuBei" }}
    index 指向索引 {{ $i := index 数组 索引 }}
    call 调用函数 {{ s := call . 2 3 }}{{- printf "result : %d\n"s}}
    • 示例 1
    package main
    
    import (
        "os"
        "text/template"
    )
    
    
    func main() {
        nameList := []string{"liuBei","guanYu","zhangFei"}
        t := template.New("xiShu")
        t = template.Must(t.Parse(`
    {{ $l := len . }}{{- printf "%d" $l}}
    {{ $i := index . 1 }}{{- println $i}}
    `))
    
        _ = t.Execute(os.Stdout, nameList)
    }
    

    输出

    3
    guanYu
    
    • 示例2(call)
    package main
    
    import (
        "os"
        "text/template"
    )
    func mySum(a int,b int)int{
        sum := a + b
        return sum
    }
    
    func main() {
        t := template.New("xiShu")
        t = template.Must(t.Parse(`
    {{ $s := call . 2 3 }}{{- printf "result : %d\n" $s}}
    `))
        _ = t.Execute(os.Stdout,mySum )
    }
    

    结果

    result : 5
    

    相关文章

      网友评论

        本文标题:Go template详解(中)- 变量使用、if语句、迭代(数

        本文链接:https://www.haomeiwen.com/subject/ayadnrtx.html