joken-前端工程师

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::
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("服务已停止")
}

  

posted on 2017-11-22 15:38  joken1310  阅读(1034)  评论(0编辑  收藏  举报