栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Go条件模板中使用自定义功能

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Go条件模板中使用自定义功能

TL; DR;
您必须检查

error
返回的值,
template.Execute()
或者
template.ExecuteTemplate()
它将告诉您为什么它不适合您。


可能出错的事情

首先,执行不会惊慌,因为它只会返回错误。您检查一下,您可能会立即知道出了什么问题:

if err := t.Execute(os.Stdout, data); err != nil {    panic(err)}

接下来可能出问题的原因:您必须 解析模板 之前
注册自定义函数,因为模板引擎需要能够静态分析模板,并且它需要事先知道这

IsIPv4
是一个函数名:

t := template.Must(template.New("").Funcs(template.FuncMap{    "IsIPv4": isIPv4,}).Parse(templ))

另一个潜在的错误是

isIPv4()
期望类型为的值
string
,并且您可能会传递不同类型的值。

nil
如果您打算停止执行模板,则为模板注册的自定义功能应仅返回非错误。因为这是如果您返回的情况
error
template.FuncMap

[…]如果在执行期间第二个(错误)返回值的计算结果为非零,则执行终止,并且Execute返回该错误。

工作实例

这是一个使用您的模板和

isIPv4()
函数的工作示例:

t := template.Must(template.New("").Funcs(template.FuncMap{    "IsIPv4": isIPv4,}).Parse(templ))m := map[string]interface{}{    "Addresses": []string{"127.0.0.1", "0:0:0:0:0:0:0:1"},}if err := t.Execute(os.Stdout, m); err != nil {    panic(err)}

输出(在Go Playground上尝试):

IPv4: 127.0.0.1IPv6: 0:0:0:0:0:0:0:1

潜在错误

上面的程序打印以下错误:

传递无效的IP:

    "Addresses": []string{"127.0.0.1.9"},

输出:

panic: template: :2:6: executing "" at <IsIPv4 .>: error calling IsIPv4:    The argument is not an IP address

传递非

string
值:

    "Addresses": []interface{}{2},

输出:

panic: template: :2:13: executing "" at <.>: wrong type for value; expected string; got int

模板解析 尝试注册您的自定义函数:

t := template.Must(template.New("").Parse(templ))t.Funcs(template.FuncMap{    "IsIPv4": isIPv4,})

输出:

panic: template: :2: function "IsIPv4" not defined


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/417798.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号