实现功能
- 增加配置文件
- 读取语雀内容,并且输出到HTML上
具体步骤
本节完整代码
参考:https://github.com/golangtips/yuque/releases/tag/v0.0.3
main.go 增加配置解析,把 services 传入 http 请求处理函数
package main
import (
"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 handler
import (
"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
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。