实现性能

  • 减少配置文件
  • 读取语雀内容,并且输入到HTML上

具体步骤

本节残缺代码
参考:https://github.com/golangtips/yuque/releases/tag/v0.0.3

main.go 减少配置解析,把 services 传入 http 申请处理函数

package mainimport (    "fmt"    "log"    "net/http"    "os"    "os/signal"    "syscall"    "time"    "github.com/golangtips/yuque/service"    "github.com/golangtips/yuque/config"    "github.com/BurntSushi/toml"    "github.com/golangtips/yuque/handler"    "github.com/gorilla/mux")func main() {    err := run()    if err != nil {        log.Fatal(err)    }}func run() error {    // 解析配置文件    var config config.Toml    if _, err := toml.DecodeFile("config.toml", &config); err != nil {        return err    }    // 初始化服务    s, err := service.NewSet(&config)    if err != nil {        return err    }    r := mux.NewRouter()    // 文章详情页    r.Methods("GET").Path("/").HandlerFunc(handler.HomePage)    // 文章详情页    r.Methods("GET").Path("/posts/{slug:[a-zA-Z0-9.]+}").HandlerFunc(handler.PostDetail(s.YuQue))    // 文章详情页    r.Methods("GET").Path("/posts").HandlerFunc(handler.PostList(s.YuQue))    // 文章搜寻页    r.Methods("GET").Path("/search").HandlerFunc(handler.Search(s.YuQue))    server := &http.Server{        Handler:      r,        Addr:         fmt.Sprintf(":%d", config.HTTPPort),        WriteTimeout: 5 * time.Second,        ReadTimeout:  5 * time.Second,    }    errs := make(chan error)    // HTTP 服务    go (func() {        log.Println("HTTP服务启动")        errs <- server.ListenAndServe()    })()    // 退出信号处理    go (func() {        ch := make(chan os.Signal, 1)        signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM)        errs <- fmt.Errorf("%s", <-ch)    })()    // 退出日志    log.Println("exit", <-errs)    return nil}

handler/post.go 减少 service.IYuQue 传参

package handlerimport (    "log"    "net/http"    "strconv"    "time"    service "github.com/golangtips/yuque/service/intf"    "github.com/gorilla/mux"    "html/template")// PostDetail 文章详情页func PostDetail(s service.IYuQue) http.HandlerFunc {    return func(w http.ResponseWriter, r *http.Request) {        // ... 这里省略....    }}// PostList 文章列表页func PostList(s service.IYuQue) http.HandlerFunc {    return func(w http.ResponseWriter, r *http.Request) {        // ... 这里省略....    }}type Post struct {    Title     string    Content   template.HTML    Slug      string    CreatedAt time.Time}