Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 检查项目是否存在且为真或假_Go_Struct_Go Templates - Fatal编程技术网

Go 检查项目是否存在且为真或假

Go 检查项目是否存在且为真或假,go,struct,go-templates,Go,Struct,Go Templates,在我的代码中,我将向模板发送一个structReturnedResult: 类型ReturnedResult结构{ 结果bool`json:“结果”` 消息字符串`json:“消息”` } 我希望模板: 检查是否有结果或无 如果有结果我想检查它是真的还是假的 因此,我写了以下内容: {{with.Result} {{if.Result} 如果报告未自动打开,请从下载 url=`{.Message}}` 打开(url为“空白”); setTimeout(函数(){document.querySe

在我的代码中,我将向模板发送一个struct
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