package main import ( "database/sql" "encoding/json" "fmt" "html/template" "net/http" "net/url" "github.com/drone/routes" "github.com/go-redis/redis" _ "github.com/go-sql-driver/mysql" ) var db = &sql.DB{} var client *redis.Client type Article struct { Id int Title string Content string } func init() { db, _ = sql.Open("mysql", "root:123456@tcp(localhost:3306)/mytest?charset=utf8") client = redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password set DB: 0, // use default DB }) pong, err := client.Ping().Result() fmt.Println(pong, err) } func Detail(w http.ResponseWriter, r *http.Request) { var params url.Values = r.URL.Query() var sid string = params.Get(":sid") var dataMap []Article redisData, _ := client.HGet("content", sid).Result() json.Unmarshal([]byte(redisData), &dataMap) //json转go对象再使用 if dataMap == nil { //判断是否为空,如果空则从数据库中查询 fmt.Println("query") rows, _ := db.Query("SELECT * FROM article where id=?", sid) for rows.Next() { var id int var title string var content string rows.Scan(&id, &title, &content) dataMap = append(dataMap, Article{ Id: id, Title: title, Content: content, }) } tjson, _ := json.Marshal(dataMap) //先转化为json再存入redis client.HSet("content", sid, tjson) } t, _ := template.ParseFiles("./detail.html") t.Execute(w, map[string]interface{}{ "DataMap": dataMap, }) } func List(w http.ResponseWriter, r *http.Request) { var dataMap []Article rows, _ := db.Query("SELECT * FROM article") for rows.Next() { var id int var title string var content string rows.Scan(&id, &title, &content) dataMap = append(dataMap, Article{ Id: id, Title: title, Content: content, }) } t, _ := template.ParseFiles("./list.html") t.Execute(w, map[string]interface{}{ "DataMap": dataMap, }) } func main() { fmt.Println("正在启动WEB服务...") var mux *routes.RouteMux = routes.New() mux.Get("/detail/:sid", Detail) mux.Get("/list", List) //http.Handle("/", mux) http.ListenAndServe(":8088", mux) fmt.Println("服务已停止") }
前端工程师、程序员