Go 模板传递非nil对象在前端变为nil

Go 模板传递非nil对象在前端变为nil,go,go-templates,Go,Go Templates,基本上,我有一个对象想要传递到前端。我在后端记录了它,它不是空的,但在前端,当我提醒它时,它变成空的 ... presentation := &presentationStruct { Object: object, } log.Errorf("%v", object) // not null template.Execute(writer, presentation) ... // but it becomes null here alert({{.Object}}) 对象是一

基本上,我有一个对象想要传递到前端。我在后端记录了它,它不是空的,但在前端,当我提醒它时,它变成空的

...
presentation := &presentationStruct {
  Object: object,
}
log.Errorf("%v", object) // not null
template.Execute(writer, presentation)
...

// but it becomes null here
alert({{.Object}})
对象是一种

map[string]map[string]struct {
  []float32
  map[int][]struct {
    string
    float32
  }
}

是因为类型太复杂吗?

不,类型复杂并不重要。模板不用于在JavaScript中将结构从后端传递到前端。它只是做字符串替换,用Go中的变量替换模板中的字符串并发送最终字符串。

你不应该离开
{{.Object}
这并不神奇。您需要在模板中对其执行操作,在地图中循环,以便可以渲染实际文本而不是结构。例如,您可以呈现如下内容{.Object['foo']['bar'][0]}(这只是一个示例,您需要访问对象中包含的数据)@Depado我知道我应该呈现实际文本,但如果对象为空,你是如何引用任何东西的@Dave C看看这个例子抽象可以做的不仅仅是将字符串映射到字符串。。。如果只是这样的话,它就不会有多大价值。如果库只不过是一个很好的旧字符串,为什么还要麻烦呢?替换?替换并不意味着像string.replace那样将一个字符串替换为另一个字符串。也许,模板是用于字符串生成的,说得更好。@哈哈,你在示例中说,无论你想在任何地方使用{.xxx}生成一个字符串,xxx都是一个原语值,而不是一个对象(golang中的struct)。在你的“替换”世界中,即使是编译器也只能进行“字符串替换”。显然,“替换”太模糊了,无法解释发生了什么。你能在替换理论中解释这段代码吗:var values={{.Object}}[key];