Golang 如何模板化嵌套结构?
Golang How to template a nested struct?
我正在尝试将 JSON 响应模板化到前端,我当前的结构是这样的:
type Response struct {
WhoisRecord struct {
CreatedDate time.Time `json:"createdDate"`
UpdatedDate time.Time `json:"updatedDate"`
ExpiresDate time.Time `json:"expiresDate"`
Registrant struct {
Name string `json:"name"`
Organization string `json:"organization"`
Street1 string `json:"street1"`
City string `json:"city"`
State string `json:"state"`
Country string `json:"country"`
CountryCode string `json:"countryCode"`
Email string `json:"email"`
Telephone string `json:"telephone"`
Fax string `json:"fax"`
} `json:"registrant"`
AdministrativeContact struct {
Name string `json:"name"`
Organization string `json:"organization"`
Street1 string `json:"street1"`
City string `json:"city"`
State string `json:"state"`
Country string `json:"country"`
CountryCode string `json:"countryCode"`
Email string `json:"email"`
Telephone string `json:"telephone"`
Fax string `json:"fax"`
} `json:"administrativeContact"`
TechnicalContact struct {
Name string `json:"name"`
Organization string `json:"organization"`
Street1 string `json:"street1"`
City string `json:"city"`
State string `json:"state"`
Country string `json:"country"`
CountryCode string `json:"countryCode"`
Email string `json:"email"`
Telephone string `json:"telephone"`
Fax string `json:"fax"`
} `json:"technicalContact"`
DomainName string `json:"domainName"`
NameServers struct {
HostNames []string `json:"hostNames"`
} `json:"nameServers"`
RegistrarName string `json:"registrarName"`
Ips []string `json:"ips"`
} `json:"WhoisRecord"`
}
然后我解组这个 json 响应,并将它传递到前端(我正在使用 GIN)
(响应 重新声明为 res)
c.HTML(200,"homework.html", gin.H{
"whois": res,
})
但这就是我 运行 遇到问题的地方,代码有效,但我不确定如何对其进行模板化,因为它是嵌套的。
例如,我想在单独的表格中显示注册人、管理和技术联系人详细信息(返回所有字段)。以及显示创建、更新和过期日期。然后通过显示注册商、ips 和名称服务器(在本例中为 NameServers
下的 hostnames
字段)
来完成
我将如何在我的 homework.html 文件中提供这个服务?我已经尝试了一切。通常我会做类似的事情:
要显示 IP:
{{ range .Ips }}
<div>
<p>IP</p>
<h6>{{ . }}</h6>
</div>
{{end}}
显示寄存器数据:
<div>
<p>Name</p>
<h6>{{ .Name }}</h6>
<p>Email</p>
<h6>{{ .Email }}</h6>
//etc
</div>
要显示注册商:
<div>
<p>Registrar</p>
<h6>{{ .RegistrarName }}</h6>
</div>
但是 none 这个是有效的(我如何在一个字段中显示注册人姓名,然后在另一个字段中显示技术名称?我显然把模板搞砸了很多次,我对它的理解是有点歪)。我已经阅读了所有可能的内容,我试图划分结构并作为单独的结构等。没有任何效果。有人可以指出正确的方向并举例说明吗?
谢谢!
模板字段是相对于当前上下文 {{.}} 计算的。以下使用包含“whois”作为键且 res
作为值的映射评估模板:
in.H{ "whois": res})
{{.whois}}
的值是您的结构,您可以从那里访问结构字段。所以你可以这样做:
{{.whois.Registrant.Name}}
我正在尝试将 JSON 响应模板化到前端,我当前的结构是这样的:
type Response struct {
WhoisRecord struct {
CreatedDate time.Time `json:"createdDate"`
UpdatedDate time.Time `json:"updatedDate"`
ExpiresDate time.Time `json:"expiresDate"`
Registrant struct {
Name string `json:"name"`
Organization string `json:"organization"`
Street1 string `json:"street1"`
City string `json:"city"`
State string `json:"state"`
Country string `json:"country"`
CountryCode string `json:"countryCode"`
Email string `json:"email"`
Telephone string `json:"telephone"`
Fax string `json:"fax"`
} `json:"registrant"`
AdministrativeContact struct {
Name string `json:"name"`
Organization string `json:"organization"`
Street1 string `json:"street1"`
City string `json:"city"`
State string `json:"state"`
Country string `json:"country"`
CountryCode string `json:"countryCode"`
Email string `json:"email"`
Telephone string `json:"telephone"`
Fax string `json:"fax"`
} `json:"administrativeContact"`
TechnicalContact struct {
Name string `json:"name"`
Organization string `json:"organization"`
Street1 string `json:"street1"`
City string `json:"city"`
State string `json:"state"`
Country string `json:"country"`
CountryCode string `json:"countryCode"`
Email string `json:"email"`
Telephone string `json:"telephone"`
Fax string `json:"fax"`
} `json:"technicalContact"`
DomainName string `json:"domainName"`
NameServers struct {
HostNames []string `json:"hostNames"`
} `json:"nameServers"`
RegistrarName string `json:"registrarName"`
Ips []string `json:"ips"`
} `json:"WhoisRecord"`
}
然后我解组这个 json 响应,并将它传递到前端(我正在使用 GIN)
(响应 重新声明为 res)
c.HTML(200,"homework.html", gin.H{
"whois": res,
})
但这就是我 运行 遇到问题的地方,代码有效,但我不确定如何对其进行模板化,因为它是嵌套的。
例如,我想在单独的表格中显示注册人、管理和技术联系人详细信息(返回所有字段)。以及显示创建、更新和过期日期。然后通过显示注册商、ips 和名称服务器(在本例中为 NameServers
下的 hostnames
字段)
我将如何在我的 homework.html 文件中提供这个服务?我已经尝试了一切。通常我会做类似的事情:
要显示 IP:
{{ range .Ips }}
<div>
<p>IP</p>
<h6>{{ . }}</h6>
</div>
{{end}}
显示寄存器数据:
<div>
<p>Name</p>
<h6>{{ .Name }}</h6>
<p>Email</p>
<h6>{{ .Email }}</h6>
//etc
</div>
要显示注册商:
<div>
<p>Registrar</p>
<h6>{{ .RegistrarName }}</h6>
</div>
但是 none 这个是有效的(我如何在一个字段中显示注册人姓名,然后在另一个字段中显示技术名称?我显然把模板搞砸了很多次,我对它的理解是有点歪)。我已经阅读了所有可能的内容,我试图划分结构并作为单独的结构等。没有任何效果。有人可以指出正确的方向并举例说明吗?
谢谢!
模板字段是相对于当前上下文 {{.}} 计算的。以下使用包含“whois”作为键且 res
作为值的映射评估模板:
in.H{ "whois": res})
{{.whois}}
的值是您的结构,您可以从那里访问结构字段。所以你可以这样做:
{{.whois.Registrant.Name}}