Golang模板函数使用范例

Golang模板函数使用范例

html/template包中的模板函数:

本包中提供的功能有限,所以很多时候需要使用用户定义的函数来辅助渲染页面。下面讲讲模板函数如何使用。

函数声明:

/* Funcs adds the elements of the argument map to the template's function map.It panics if a value in the map is not a function with appropriate return type. However, it is legal to overwrite elements of the map. The return value is the template, so calls can be chained.
*/
func (t *Template) Funcs(funcMap FuncMap) *Template 

Funcs函数就是用来创建我们模板函数的函数了,它需要一个FuncMap类型的参数,继续看手册

/* FuncMap is the type of the map defining the mapping from names to functions. Each function must have either a single return value, or two return values of which the second has type error. In that case, if the second (error) argument evaluates to non-nil during execution, execution terminates and Execute returns that error. FuncMap has the same base type as FuncMap in "text/template", copied here so clients need not import "text/template".
*/
type FuncMap map[string]interface{}

使用方法:

例一:

函数定义:

func SpliteByCommaAndGetFirst(str string) string {
    return strings.Split(str, ",")[0]
}

模板绑定模板函数:

  1. 创建一个FuncMap类型的map,key是模板函数的名字,value是其函数的定义。
  2. 将 FuncMap注入到模板中。
funcMap := template.FuncMap{"SpliteByCommaAndGetFirst": SpliteByCommaAndGetFirst}
t := template.New("agents_info.html").Funcs(funcMap)
t =template.Must(t.ParseFiles("./ui/templates/agents_info.html"))
err := t.ExecuteTemplate(w, "agents_info.html", agentsInfo)
if err != nil {
    fmt.Println(err)
}

模板中如何使用:

{{SpliteByCommaAndGetFirst .Version}}

注意:

  1. 函数的注入,必须要在parseFiles之前,因为解析模板的时候,需要先把函数编译注入。
  2. Template object can have multiple templates in it and each one has a name. If you look at the implementation of ParseFiles, you see that it uses the filename as the template name inside of the template object. So, name your file the same as the template object, (probably not generally practical) or else use ExecuteTemplate instead of just Execute.
  3. The name of the template is the bare filename of the template, not the complete path。如果模板名字写错了,执行的时候会出现:”**” is an incomplete or empty template

例二:

函数定义:

func SpliteByCommaAndGetFirst(str string) string {
    return strings.Split(str, ",")[0]
}
func Add(a,b int)int{
    return a+b
}

绑定模板函数:

funcMap := template.FuncMap{"SpliteByCommaAndGetFirst": SpliteByCommaAndGetFirst, "Add":Add}
t, err := template.New("layout.html").Funcs(funcMap).ParseFiles("template/html/layout.html","template/html/result_default.html")
err = t.Execute(w, temp)

模板中如何使用:

{{SpliteByCommaAndGetFirst .Version}}
{{And 1 2}}

例三:

t, err := template.New("_base.html").Funcs(funcs).ParseFiles("../view/_base.html", "../view/home.html")
if err != nil {
    fmt.Fprint(w, "Error:", err)
    fmt.Println("Error:", err)
    return
}
err = t.Execute(w, data)
if err != nil {
    fmt.Fprint(w, "Error:", err)
    fmt.Println("Error:", err)
}

The name of the template is the bare filename of the template, not the complete path. Execute will execute the default template provided it’s named to match, so there’s no need to use ExecuteTemplate.

In this case, _base.html file is the outermost container, eg:

<!DOCTYPE html>
<html><body>
<h1>{{ template "title" }}</h1>
{{ template "content" }}
</body></html>

while home.html defines the specific parts:

{{ define "title" }}Home{{ end }}

{{ define "content" }}
Stuff
{{ end }}
Go语言(Golang)是一种开源的编程语言,它具有简洁、高效和并发性强的特点。在Go语言中,函数是一等公民,可以像其他类型的值一样进行传递和操作。 下面是介绍Golang实现函数的几个关键点: 1. 函数定义:使用关键字`func`来定义函数,语法如下: ``` func 函数名(参数列表) 返回值列表 { // 函数体 } ``` 例如,定义一个计算两个整数之和的函数: ``` func add(a, b int) int { return a + b } ``` 2. 函数参数:函数可以接受零个或多个参数,参数之间用逗号分隔。参数可以指定类型,例如`a, b int`表示两个整数类型的参数。如果多个参数的类型相同,可以只在最后一个参数后面指定类型。 例如,定义一个计算两个整数之差的函数: ``` func subtract(a, b int) int { return a - b } ``` 3. 函数返回值:函数可以返回一个或多个值。返回值列表放在函数名后面的括号中,并指定返回值的类型。如果函数没有返回值,可以省略返回值列表。 例如,定义一个计算两个整数之积和商的函数: ``` func multiplyAndDivide(a, b int) (int, float64) { return a * b, float64(a) / float64(b) } ``` 4. 匿名函数:在Go语言中,可以使用匿名函数,即没有函数名的函数。匿名函数可以直接赋值给变量,也可以作为参数传递给其他函数。 例如,定义一个匿名函数并将其赋值给变量: ``` add := func(a, b int) int { return a + b } ``` 5. 函数作为参数和返回值:在Go语言中,函数可以作为参数传递给其他函数,也可以作为函数的返回值。 例如,定义一个接受函数作为参数的函数: ``` func operate(a, b int, operation func(int, int) int) int { return operation(a, b) } ``` 以上是Golang实现函数的基本介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值