Go:在模板中引用字符串

dem*_*emi 1 templates go

我想把我的html模板(实际上是JavaScript部分)null或带有电子邮件的字符串:

var email = null;
// or a string:
var email = "somebody@somewhere.com";
Run Code Online (Sandbox Code Playgroud)

但是有了模板

var email = {{.Email}};
Run Code Online (Sandbox Code Playgroud)

我每次都被引用字符串:

var email = "null";
var email = "somebody@somewhere.com";
Run Code Online (Sandbox Code Playgroud)

怎么解决?

编辑:这是我的代码:http://play.golang.org/p/8k4s8dv2PE

您可以看到带有引号的Go环绕字符串并删除注释 - 有预处理或后处理.

Pad*_*ddy 5

如果没有看到您的代码,我能做的最好的事情就是提供一个显示您所需功能的示例.

如果我不得不猜测,我会说你传入的数据是一个字符串,而不是一个字符串指针.字符串的值不能为nil/null,只能是字符串指针.虽然这会产生一个"",而不是"null",(如此处所示),所以我只能想象这是你在代码中做的奇怪的事情.

为了防止链接腐烂,我复制了下面的代码示例,但是值得单击链接以查看其输出.

所需功能:

package main

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

type TemplateData struct {
    Email *string
}

func main() {

    const temp = "<script>var email = {{.Email}};</script>\n"

    t := template.Must(template.New("email_template").Parse(temp))
    email := "somebody@somewhere.com"
    err := t.Execute(os.Stdout, TemplateData{
        Email: &email,
    })
    if err != nil {
        log.Println("executing template:", err)
    }
    err = t.Execute(os.Stdout, TemplateData{
        Email: nil,
    })
    if err != nil {
        log.Println("executing template:", err)
    }

}
Run Code Online (Sandbox Code Playgroud)

尝试使用"null"字符串:

package main

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

type TemplateData struct {
    Email string
}

func main() {

    const temp = "<script>var email = {{.Email}};</script>\n"

    t := template.Must(template.New("email_template").Parse(temp))
    email := "somebody@somewhere.com"
    err := t.Execute(os.Stdout, TemplateData{
        Email: email,
    })
    if err != nil {
        log.Println("executing template:", err)
    }
    err = t.Execute(os.Stdout, TemplateData{
    })
    if err != nil {
        log.Println("executing template:", err)
    }

}
Run Code Online (Sandbox Code Playgroud)

  • @demi html/template上下文自动转义文本.由于字符串位于脚本上下文中,因此会将其转换为javascript字符串.要获取null对象,您需要传递文字nil,而不是包含单词"null"的字符串.查看我所需功能的实现. (2认同)