整体结构

MVC结构:View提供了html页面,Model定义了数据的结构,Control去获取具体的数据并渲染页面,在服务端生成需要响应的页面

View

1、使用html template模板引擎:

  • 取值,如{{.item}}
  • 循环,如{{range}}
  • 选择,如{{if}}...{{else}}...{{end}}
  • 函数调用,如{{len}}

2、常用函数

解析一个html模板文件

func ParseFiles(filenames ...string) (*Template, error) {
    return parseFiles(nil, filenames...)
}

渲染一个模板文件并完成后输出

func (t *Template) Execute(wr io.Writer, data interface{}) error {
    if err := t.escape(); err != nil {
        return err
    }
    return t.text.Execute(wr, data)
}

3、翻页

elasticSearch自带翻页功能,只要在查询的时候跟上from语句,设计“上一页”和“下一页”如下:

result.PrevFrom = result.Start - len(result.Items)
result.NextFrom = result.Start + len(result.Items)

Model

根据需求构造数据结构

type SearchResult struct {
    Hits int64
    Start int
    Items []engine.Item

    Query string
    PrevFrom int
    NextFrom int
}

Control

1、使用http.FileServer()来提供静态内容,如css, js, 图片等
2、启动web服务接收搜索请求(需要研究go的http标准库如何设计server)