golang 网络编程(3)

96
zidea Excellent
1.1 2019.04.20 18:34 字数 424

square-gopher.png

首先要进行模板替换,需要引入text/template这个包,其中提供了有关模板的方法。

type Tut struct{
    Title string
    Author string
}

先定义数据结构,我们可能总是习惯用我们熟知语言例如 java 中对应的类来理解 go 语言中结构,这就错了,在学习一门外语的时候我们总是在头脑中先翻译为中文,然后通过中文含义去理解外语。这样做是不对的,当然我们中其他语言语法作为基础去学习 go 语言,当然也就是失去 go 语言本身含义和他的美了。

const tmpl = `Tut - Title: {{.Title}}, Author: {{.Author}}`

定义一个我们要替换的文本,这里{{.Title}}{{.Author}}都是占位符。

t := template.New("tut")
    t, err := t.Parse(tmpl)
  • 首先我们创建一个模板给他一名称为 tut模板,会返回一个*Template类型
  • Parse 方法将文本解析为模板
func (t *Template) ParseFiles(filenames ...string) (*Template, error)

Execute 方法结构 tut 传入解析过模板,然后处理完的输出到输出编辑器 os.Stdout 进行输出。

if err:=t.Execute(os.Stdout,tut); err != nil{
        log.Fatal("Execute:",err)
        return
    }
import(
    "os"
    "log"
    "text/template"
)

type Tut struct{
    Title string
    Author string
}
const tmpl = `Tut - Title: {{.Title}}, Author: {{.Author}}`
func main() {
    tut := Tut{
        "angular basic tut",
        "zidea",
    }

    t := template.New("tut")
    t, err := t.Parse(tmpl)

    if err != nil {
        log.Fatal("Parse:", err)
        return
    }

    if err:=t.Execute(os.Stdout,tut); err != nil{
        log.Fatal("Execute:",err)
        return
    }
}
Tut - Title: angular basic tut, Author: zideajangwoodeMacBook-Air:tmpla jangwoo$
  1. 定义包换结构数据占位符的模板文本
  2. 通过调用```template.New 函数来创建 (*Template)
  3. 通过调用 Parse 方法解析字符串解析为模板
  4. Execute 将数据对象传入解析好的模板中渲染出输出形式
package main

import(
    "os"
    "log"
    "text/template"
)

type Tut struct{
    Title string
    Author string
}
const tmpl = `Tut list
{{range .}}
    Title: {{.Title}}, Author: {{.Author}}
{{end}} 
`
func main() {
    tuts := []Tut{
        {"angular basic tut","zidea"},
        {"vue basic tut","zidea"},
    }

    t := template.New("tut")
    t, err := t.Parse(tmpl)

    if err != nil {
        log.Fatal("Parse:", err)
        return
    }

    if err:=t.Execute(os.Stdout,tuts); err != nil{
        log.Fatal("Execute:",err)
        return
    }
}

这里没有什么新意,{{range .}}接受一个循环体

const tmpl = `Tut list
{{range .}}
    Title: {{.Title}}, Author: {{.Author}}
{{end}} 
`

可以通过define 定义一个变量,然后在ExecuteTemplate通过指定替换T变量的值,可以将模板中定义T变量替换为我们提供的值。T 变量作用域开始 define 终止于 end,我们给 T 赋值将替换 {{.}}

import(
    "log"
    "os"
    "text/template"
)

func main() {
    t,err := template.New("test").Parse(`{{define "T"}}Hello, {{.}} {{end}}`)
    err = t.ExecuteTemplate(os.Stdout,"T","World")
    if err != nil{
        log.Fatal("Execute",err)
    }
}
Hello, World 

我们可以在模板中声明变量,变量名以开始,赋值使用隐式赋值```{{tut := "angular basic tut"}} {{$tut}} ```。

t,err := template.New("test").Parse(`{{define "T"}}{{$tut := "angular basic tut"}} {{$tut}} Hello, {{.}} {{end}}`)
    err = t.ExecuteTemplate(os.Stdout,"T","World")
    if err != nil{
        log.Fatal("Execute",err)
    }
th-5.jpeg

参考了 Web Development with Go 一书

golang
Web note ad 1