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

回到顶部