Go 检查项目是否存在且为真或假
在我的代码中,我将向模板发送一个structGo 检查项目是否存在且为真或假,go,struct,go-templates,Go,Struct,Go Templates,在我的代码中,我将向模板发送一个structReturnedResult: 类型ReturnedResult结构{ 结果bool`json:“结果”` 消息字符串`json:“消息”` } 我希望模板: 检查是否有结果或无 如果有结果我想检查它是真的还是假的 因此,我写了以下内容: {{with.Result} {{if.Result} 如果报告未自动打开,请从下载 url=`{.Message}}` 打开(url为“空白”); setTimeout(函数(){document.querySe
ReturnedResult
:
类型ReturnedResult结构{
结果bool`json:“结果”`
消息字符串`json:“消息”`
}
我希望模板:
结果
或无结果
我想检查它是真的
还是假的
{{with.Result}
{{if.Result}
如果报告未自动打开,请从下载
url=`{.Message}}`
打开(url为“空白”);
setTimeout(函数(){document.querySelector('#foo').style.display='none'},5000);
{{else}
{{.Message}}>
setTimeout(函数(){document.querySelector('#foo').style.display='none'},5000);
{{end}
{{end}
有时我将没有数据的模板称为tmpl.Execute(w,nil)
,有时将数据称为tmpl.Execute(w,webReturn)
一个没有数据的工作正常,但一个有数据的工作不正常,不知道什么是错误的
如果需要,下面是我的完整代码
//go build-ldflags“-H=windowsgui”
包干管
进口(
“字节”
“编码/json”
“fmt”
“io/ioutil”
“日志”
“net/http”
“字符串”
“文本/模板”
“github.com/zserge/lorca”
)
//联系人详细信息。。。
类型ContactDetails结构{
电子邮件字符串
主题字符串
消息字符串
Color1[]字符串
Color2[]字符串
}
//返回结果。。。
类型ReturnedResult结构{
结果bool`json:“结果”`
消息字符串`json:“消息”`
}
func索引(w http.ResponseWriter,r*http.Request){
tmpl:=template.Must(template.ParseFiles(“forms.html”))
如果r.Method!=http.MethodPost{
tmpl.Execute(w,nil)
返回
}
r、 ParseForm()
fmt.Println(r.Form)//在服务器端打印信息。
fmt.Println(“路径”,r.URL.path)
fmt.Println(“scheme”,r.URL.scheme)
格式打印项次(r.Form[“color1”][0])
格式打印项次(r.Form[“color1”][1])
对于k,v:=范围r.形式{
fmt.Println(“键:”,k)
fmt.Println(“val:,strings.Join(v)”)
}
详细信息:=联系人详细信息{
电子邮件:r.FormValue(“电子邮件”),
主题:r.FormValue(“主题”),
消息:r.FormValue(“消息”),
Color1:r.Form[“Color1”],
Color2:r.Form[“Color2”],
}
fmt.Printf(“从网站发布!r.PostFrom=%v\n”,r.PostForm)
fmt.Printf(“详细信息=%v\n”,详细信息)
//r、 FormValue(“用户名”)
fmt.Println()
//对细节做点什么
sheetID:=“AKfycbxfMucXOzX15tfU4errRSAa9IzuTRbHzvUdRxzzeYnNA8Ynz8LJuBuaMA/exec”
url:=”https://script.google.com/macros/s/“+sheetID+”/exec”
bytesRepresentation,err:=json.Marshal(详细信息)
如果错误!=零{
log.Fatalln(错误)
}
resp,err:=http.Post(url,“application/json”,bytes.NewBuffer(bytesRepresentation))
如果错误!=零{
log.Fatalln(错误)
}
//读取所有响应体
数据,Util:=ioutil.ReadAll(分别为正文)
//闭合响应体
各自主体关闭()
webReturn:=ReturnedResult{}
如果err:=json.Unmarshal([]字节(数据),&webReturn);err!=nil{
恐慌(错误)
}
fmt.Println(webReturn.Message)
webReturn.Message=strings.ReplaceAll(webReturn.Message,&export=download,“”)
//执行(w,结构{Success bool}{webReturn.Result})
tmpl.Execute(w,webReturn)
}
func main(){
//启动主机goroutine
go func(){
http.Handle(“/static/”,http.StripPrefix(“/static/”,http.FileServer(http.Dir(“/public”)))
http.HandleFunc(“/”,索引)
http.listendServe(“:8090”,无)
}()
//启动用户界面
用户界面,错误:=lorca.New(“http://localhost:8090/index", "", 1200, 800)
如果错误!=零{
log.Fatal(错误)
}
延迟ui.Close()
td->tr/-2,因为前两行用于标题
var tbl=document.querySelector('tbody');
如果(tbl&&tbl.rows.length>1){
tbl.deleteRow(i);
数组.from(tbl.rows).forEach((行,索引)=>{
行。单元格[0]。innerHTML=index+1;
});
}
}
函数insRow(row){
var i=row.parentNode.parentNode.rowIndex-2;//这->td->tr//-2,因为前两行用于标题
var tbl=document.querySelector('tbody');
var行=document.createElement('tr');
row.innerHTML=`
`;
var len=tbl.rows.length;
行。单元格[0]。innerHTML=len+1;
tbl.insertBefore(世界其他地区,tbl.children[i+1]);
数组.from(tbl.rows).forEach((行,索引)=>{
行。单元格[0]。innerHTML=index+1;
});
//tbl.追加子项(世界其他地区);
}
接触
鲍勃住在一个公寓里。
电子邮件:
主题:
消息:
每月储蓄
表格标题
锡
采购订单号
采购订单发票金额
行动
1.
表尾
{{with.Message}}
{{if.Result}
如果报告未自动打开,请从下载
url=`{.Message}}`
打开(url为“空白”);
setTimeout(函数(){document.querySelector('#foo').style.display='none'},5000);
{{else}
{{.Message}}>
setTimeout(函数(){document.querySelector('#foo').style.display='none'},5000);
{{end}
{{end}
返回一个错误
,请检查:
if err := tmpl.Execute(w, webReturn); err != nil {
// Handle error:
log.Printf("Template error: %v", err)
return
}
下面是一个最小的可重复示例:
type ReturnedResult struct {
Result bool
Message string
}
func main() {
t := template.Must(template.New("").Parse(src))
if err := t.Execute(os.Stdout, nil); err != nil {
panic(err)
}
p := ReturnedResult{Result: false, Message: "a"}
if err := t.Execute(os.Stdout, p); err != nil {
panic(err)
}
p = ReturnedResult{Result: true, Message: "a"}
if err := t.Execute(os.Stdout, p); err != nil {
panic(err)
}
}
const src = `{{with .Message}}
{{if .Result}}
Message with true result
{{else }}
Message with false result
{{end}}
{{end}}
`
在上对其进行测试,输出为:
panic: template: :2:7: executing "" at <.Result>: can't evaluate field Result in type string
goroutine 1 [running]:
main.main()
/tmp/sandbox993188219/prog.go:22 +0x226
使用此模板,输出将是(在上尝试):
结果为假的消息
具有真实结果的消息
返回一个错误
,请检查:
if err := tmpl.Execute(w, webReturn); err != nil {
// Handle error:
log.Printf("Template error: %v", err)
return
}
这里有一个最小的re
<empty output for the nil param>
Message with false result
Message with true result