2

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

var email = null;
// or a string:
var email = "somebody@somewhere.com";

但是有模板

var email = {{.Email}};

我每次都得到引用的字符串:

var email = "null";
var email = "somebody@somewhere.com";

如何解决?

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

你可以看到 Go 用引号包围字符串并删除注释 - 有预处理或后处理。

4

2 回答 2

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)
    }

}

尝试使用“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)
    }

}
于 2013-01-04T06:45:12.897 回答
0

对代码示例使用最少的编辑:

type TplCtx struct {
  UserEmail *string
}

t.Execute(os.Stdout, &TplCtx{nil})
于 2018-06-09T17:28:46.420 回答