func defaultCacheKeyAlgorithm(ctx echo.Context) string { filter := map[string]bool{ "from": true, "sign": true, "nonce": true, "timestamp": true, } form := ctx.FormParams() var keys = make([]string, 0, len(form)) for key := range form { if _, ok := filter[key]; !ok { keys = append(keys, key) } } sort.Sort(sort.StringSlice(keys)) buffer := goutils.NewBuffer() for _, k := range keys { buffer.Append(k).Append("=").Append(ctx.FormValue(k)) } req := ctx.Request() return goutils.Md5(req.Method() + req.URL().Path() + buffer.String()) }
// 驼峰式写法转为下划线写法 func UnderscoreName(name string) string { buffer := goutils.NewBuffer() for i, r := range name { if unicode.IsUpper(r) { if i != 0 { buffer.Append('_') } buffer.Append(unicode.ToLower(r)) } else { buffer.Append(r) } } return buffer.String() }
func (s *Service) GenSign(args map[string]interface{}) string { keys := make([]string, 0, len(args)) for k := range args { keys = append(keys, k) } sort.Sort(sort.StringSlice(keys)) buffer := goutils.NewBuffer() for _, k := range keys { buffer.Append(k).Append("=").Append(goutils.ConvertString(args[k])) } if s.CommonSalt != "" { buffer.Append(s.CommonSalt) } else { if from, ok := args["from"]; ok { if salt, ok := s.FromSalt[goutils.ConvertString(from)]; ok { buffer.Append(salt) } } } return goutils.Md5(buffer.String()) }
func (this *SolrClient) Post() error { stringBuilder := goutils.NewBuffer().Append("{") needComma := false for _, addCommand := range this.addCommands { commandJson, err := json.Marshal(addCommand) if err != nil { continue } if stringBuilder.Len() == 1 { needComma = false } else { needComma = true } if needComma { stringBuilder.Append(",") } stringBuilder.Append(`"add":`).Append(commandJson) } for _, delCommand := range this.delCommands { commandJson, err := json.Marshal(delCommand) if err != nil { continue } if stringBuilder.Len() == 1 { needComma = false } else { needComma = true } if needComma { stringBuilder.Append(",") } stringBuilder.Append(`"delete":`).Append(commandJson) } if stringBuilder.Len() == 1 { logger.Errorln("post docs:no right addcommand") return errors.New("no right addcommand") } stringBuilder.Append("}") logger.Infoln("start post data to solr...") resp, err := http.Post(config.ConfigFile.MustValue("search", "engine_url")+"/update?wt=json&commit=true", "application/json", stringBuilder) if err != nil { logger.Errorln("post error:", err) return err } defer resp.Body.Close() var result map[string]interface{} err = json.NewDecoder(resp.Body).Decode(&result) if err != nil { logger.Errorln("parse response error:", err) return err } logger.Infoln("post data result:", result) return nil }
// GetPageHtml 构造分页html, uri 当前uri, total 记录总数 func (this *Paginator) GetPageHtml(uri string, total ...int) string { if len(total) > 0 { this.SetTotal(int64(total[0])) } if this.totalPage < 2 { return "" } if !strings.Contains(uri, "?") { uri += "?" } // 显示5页,然后显示...,接着显示最后两页 stringBuilder := goutils.NewBuffer() stringBuilder.Append(`<li class="prev previous_page">`) // 当前是第一页 if this.curPage != 1 { stringBuilder.Append(`<a href="`).Append(uri).Append("p=").Append(this.curPage - 1).Append(`">«</a>`) } stringBuilder.Append(`</li>`) // 当前页前后至少保持两页可以翻看; // 离最开始或最后5页内,不显示 ...,否则显示 ... if this.curPage <= maxShow { // 当前页之前的页 for i := 0; i < this.curPage-1; i++ { this.appendPage(stringBuilder, uri, i+1) } // 当前页 this.appendCurPage(stringBuilder, uri) // 当前页之后的页 // 全部显示 if this.totalPage-this.curPage <= maxShow { for i := this.curPage; i < this.totalPage; i++ { this.appendPage(stringBuilder, uri, i+1) } } else { // 显示当前页后两页、...和最后两页 for i := this.curPage; i < this.curPage+2; i++ { this.appendPage(stringBuilder, uri, i+1) } stringBuilder.Append(`<li class="disabled"><a href="#"><span class="gap">…</span></a></li>`) for i := this.totalPage - 2; i < this.totalPage; i++ { this.appendPage(stringBuilder, uri, i+1) } } } else { // 显示最开始两页,然后是...和挨着当前页的两页 for i := 0; i < 2; i++ { this.appendPage(stringBuilder, uri, i+1) } stringBuilder.Append(`<li class="disabled"><a href="#"><span class="gap">…</span></a></li>`) for i := this.curPage - 2; i < this.curPage; i++ { this.appendPage(stringBuilder, uri, i) } // 当前页 this.appendCurPage(stringBuilder, uri) // 当前页之后的页 // 全部显示 if this.totalPage-this.curPage <= maxShow { for i := this.curPage; i < this.totalPage; i++ { this.appendPage(stringBuilder, uri, i+1) } } else { // 显示当前页后两页、...和最后两页 for i := this.curPage; i < this.curPage+2; i++ { this.appendPage(stringBuilder, uri, i+1) } stringBuilder.Append(`<li class="disabled"><a href="#"><span class="gap">…</span></a></li>`) for i := this.totalPage - 2; i < this.totalPage; i++ { this.appendPage(stringBuilder, uri, i+1) } } } // 处理next stringBuilder.Append(`<li class="next next_page ">`) if this.curPage < this.totalPage { stringBuilder.Append(`<a href="`).Append(uri).Append("p=").Append(this.curPage + 1).Append(`">»</a>`) } stringBuilder.Append(`</li>`) return stringBuilder.String() }
func (this *User) String() string { buffer := goutils.NewBuffer() buffer.Append(this.Username).Append(this.Email).Append(this.Uid).Append(this.Mtime) return buffer.String() }