Golang中如何使用字符串模板?
Golang中如何使用字符串模板? 大家好
我不懂Go语言,但需要根据我的需求调整一个Golang模板文件。我目前遇到的难题是如何创建一个变量,该变量是将值应用到字符串模板后的结果。
具体来说,我已经定义了 $network.IP(其值为 1.1.1.1),并且想创建一个新变量 $host,其值应为 http://1.1.1.1:555。这意味着模板是 http://<这里填入值>:555。
我尝试了各种形式的写法:
{{ $host := {{ $network.IP | printf "http://%q:555" }} }}
但总是得到:
2020/01/23 13:57:32 Unable to parse template: template: caddy.templ:8: unexpected "{" in command
应该如何处理这个问题?
更多关于Golang中如何使用字符串模板?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
2 回复
我想我找到了解决方案:
{{ $host := printf "http://%s" $network.IP }}
更多关于Golang中如何使用字符串模板?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Go模板中创建变量并应用字符串格式化,正确的写法是:
{{ $host := printf "http://%s:555" $network.IP }}
或者使用更简洁的写法:
{{ $host := print "http://" $network.IP ":555" }}
你遇到的语法错误是因为在{{ ... }}内部又嵌套了{{ ... }},这是不允许的。Go模板的变量声明和函数调用都在同一个{{ ... }}块内完成。
完整示例:
package main
import (
"os"
"text/template"
)
func main() {
tmpl := `{{ $network := dict "IP" "1.1.1.1" }}
原始IP: {{ $network.IP }}
{{ $host := printf "http://%s:555" $network.IP }}
格式化后的host: {{ $host }}
{{ $host2 := print "http://" $network.IP ":555" }}
另一种方式: {{ $host2 }}`
t, _ := template.New("test").Parse(tmpl)
t.Execute(os.Stdout, nil)
}
输出:
原始IP: 1.1.1.1
格式化后的host: http://1.1.1.1:555
另一种方式: http://1.1.1.1:555
在你的具体场景中,只需要这样写:
{{ $host := printf "http://%s:555" $network.IP }}
这样$host变量就会被正确赋值为http://1.1.1.1:555。

