package main import ( "fmt" "go_blog/conf" "go_blog/controllers" "go_blog/models" "go_blog/serializers" "log" "net/http" "strconv" "github.com/gin-gonic/gin" ) type User struct { Name string Gender string Age int Password string PasswordHash []byte } const templatePath = "./templates/*" func init() { conf.SetUp() models.SetUp() } func main() { r := gin.Default() r.LoadHTMLGlob(templatePath) // 注册WebSocket路由 registerRoutes(r) r.GET("/events", esSSE) r.Run(":8910") } func esSSE(c *gin.Context) { w := c.Writer w.Header().Set("Content-Type", "text/event-stream") w.Header().Set("Cache-Control", "no-cache") w.Header().Set("Connection", "keep-alive") w.Header().Set("Access-Control-Allow-Origin", "*") _, ok := w.(http.Flusher) if !ok { log.Panic("server not support") //浏览器不兼容 } _, err := fmt.Fprintf(w, "id: aaa\ndata: %s\n\n", "dsdf") _, er1r := fmt.Fprintf(w, "event: connecttime\ndata: %s\n\n", "connecttime") if err != nil || er1r != nil { print("error", err) return } } func registerRoutes(r *gin.Engine) { r.GET("/", func(c *gin.Context) { var items []models.Content models.DB.Select("*").Limit(5).Find(&items, "type = ?", "post") c.HTML(http.StatusOK, "index.tmpl", gin.H{ "Items": items, }) }) r.GET("/page", func(c *gin.Context) { var items []models.Content var pager serializers.Pager pager.InitPager(c) offset := (pager.Page - 1) * pager.PageSize models.DB.Select("*").Offset(offset).Limit(pager.PageSize).Find(&items, "type = ?", "post") c.HTML(http.StatusOK, "index.tmpl", gin.H{ "Items": items, "Pager": pager, "Title": "文章列表", }) }) r.GET("/createcontent", func(c *gin.Context) { c.HTML(http.StatusOK, "content.tmpl", nil) }) r.GET("/post/:id", func(c *gin.Context) { id, err := strconv.ParseInt(c.Param("id"), 10, 32) if err != nil { return } var content = models.Content{Cid: int32(id)} models.DB.First(&content) c.HTML(http.StatusOK, "post.tmpl", content) }) user := getUserInfo() r.GET("/login", func(c *gin.Context) { c.HTML(200, "login.tmpl", map[string]interface{}{ "title": "这个是titile,传入templates中的", "user": user, }) }) r.GET("/register", func(c *gin.Context) { c.HTML(200, "register.tmpl", map[string]interface{}{ "title": "这个是titile,传入templates中的", "user": user, }) }) r.GET("/ws", controllers.WebSocketHandler) r.POST("/content", controllers.CreateContentHandler) r.POST("/login", controllers.UsersLoginHandler) r.POST("/register", controllers.UsersRegisterHandler) r.POST("/setinfo", controllers.UsersSetInfoHandler) r.POST("/setpwd", controllers.UsersSetPwdHandler) } func getUserInfo() User { user := User{ Name: "user", Gender: "male", Age: 18, Password: "nothings", PasswordHash: []byte("nothings"), } return user }