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("服务已停止")
}
前端工程师、程序员

浙公网安备 33010602011771号