go - 从 slice 创建复选框组

标签 go

我刚开始使用 Go,因此这可能是一个简单的答案,但到目前为止我无法在网上找到它。

我有以下结构:

type Answer struct {
    AnswerId   int
    AnswerText string
    Selected   bool
}

type Answers struct {
    answers []Answer
}

type Question struct {
    QuestionId int
    Answers
    QuestionText string
}

这是支持问卷调查的网络应用的域模型的简单外观。

func loadPage() (*Question, error) {
    return &Question{
        QuestionId:   321,
        QuestionText: "What's the answer?",
        Answers: Answers{
            answers: []Answer{
                Answer{
                    AnswerId:   1,
                    AnswerText: "Answer number 1",
                    Selected:   false,
                },
                Answer{
                    AnswerId:   2,
                    AnswerText: "Answer number 2",
                    Selected:   false,
                },
            },
        },
    }, nil
}

在这里你可以看到我用几个答案打断了一个问题。这已被 stub ,以便我可以向 View 发送一些内容。

func viewHandler(w http.ResponseWriter, r *http.Request) {
    p, _ := loadPage()
    fmt.Fprintf(w, for _,element := range p.Answers.answers {
      //Do something with each element in answers
    })
}

这就是我卡住的地方;我的 viewHandler。允许我根据 answers slice 的内容创建复选框组的语法是什么?我们将不胜感激。

最佳答案

首先,这是您可以做些什么来改进代码

Type Answers []Answer

type Question struct {
    QuestionId int
    // Question is not an "Answers" but has "Answers"
    Answers Answers
    QuestionText string
}

与其使用嵌入式类型来表示“IS-A”关系,不如使用 Answers 类型的属性来避免复杂的结构定义。

现在这是您的 viewHandler 的样子:

func ViewHandler(w http.ResponseWriter, r *http.Request) {

    // This should be loaded from another template file
    const tpl = `
    <!DOCTYPE html>
    <html>
    <body>
        <form action="demo" method="POST">
            <!-- Once the pagedata struct exists in the context,
             we can query its field value with dot notation -->
            <h3>{{.QuestionText}}</h3>
            {{range .Answers}}
                <input type="radio" name="" {{if .Selected}}checked{{end}}
                >{{.AnswerText}}<br>
            {{end}}
        </section>
    </body>
    </html>
    `

    t, _ := template.New("questionaire").Parse(tpl)

    pagedata, _ := loadPage()

    // Pass in the data struct
    _ = t.Execute(w, pagedata)
}

您只需解析模板,然后使用 Execute 传递您希望其数据在响应上下文中可用的数据结构。

在此处查看完整代码 https://play.golang.org/p/6PbX6YsLNt

关于go - 从 slice 创建复选框组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33725476/

相关文章:

google-app-engine - app.yaml env_variables中无法处理换行代码

go - 错误 : EOF for reading XML body of Post request

heroku - Go:部署在 Heroku 上

postgresql - 如何在 golang 中使用 .Format 将 time.Time 对象转换为格式化字符串?

go - struct 没有实现接口(interface),即使它具有相同的功能

go - 如何正确停止定时器?

performance - Go语言中通用类型(int/uint)相对于特定类型(int64/uint64)有什么优势?

mongodb - 用 Go 编写的程序打开许多与 mongoDB 的连接

mongodb - Golang BSON 转换

ssl - 在 GoLang 中执行 ReverseProxy 时确认 TLS 证书