golang mysql json_golang mysql留言板系统,呵呵

做了一个简易留言板系统,练练手,用到了7个包,呵呵.以后要多写写东西,这样进步比较快.

main.go

// Golang简易留言板系统

// Author: dotcoo zhao

// mysql

// CREATE TABLE liuyan (

// id int primary key auto_increment not null,

// name varchar(20) not null,

// url varchar(100) not null,

// content varchar(1000) not null,

// time int

// ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;

// sqlite3

// CREATE TABLE liuyan (

// id integer primary key autoincrement,

// name text,

// url text,

// content text,

// time integer

// );

package main

import (

"database/sql"

"io"

"net/http"

"strings"

"text/template"

"time"

// "github.com/ziutek/mymysql/godrv"

_ "github.com/mattn/go-sqlite3"

)

// 留言结构

type Liuyan struct {

Id int

Name string

Url string

Content string

Time int

}

// // 显示留言时间

// func (l Liuyan) ShowTime() string {

// t := time.Unix(int64(l.Time), 0)

// return t.Format("2006-01-02 15:04:05")

// }

func ShowTime(timeUnix int) string {

t := time.Unix(int64(timeUnix), 0)

return t.Format("2006-01-02 15:04:05")

}

// 全局变量

var db *sql.DB

var view *template.Template

func main() {

// godrv.Register("SET NAMES utf8")

// 连接数据库

var err error

// db, err := sql.Open("mymysql", "tcp:127.0.0.1:3306*go/root/123456")

db, err = sql.Open("sqlite3", "./liuyan.db")

if err != nil {

panic(err)

}

defer db.Close()

// 准备模板

err = LoadTemplate()

if err != nil {

panic(err)

}

// 注册处理函数

http.HandleFunc("/load", loadHandler)

http.HandleFunc("/", listHandler)

http.HandleFunc("/liuyan", liuyanHandler)

// 启动服务器

err = http.ListenAndServe(":12345", nil)

if err != nil {

panic(err)

}

}

// 加载模板

func LoadTemplate() error {

// 准备模板函数

funcs := make(template.FuncMap)

funcs["showtime"] = ShowTime

// 准备模板

v := template.New("view")

v.Funcs(funcs)

_, err := v.ParseGlob("view/*.htm")

if err != nil {

return err

}

view = v

return nil

}

// 动态加载模板 /load

func loadHandler(w http.ResponseWriter, req *http.Request) {

err := LoadTemplate()

if err != nil {

http.Error(w, err.Error(), 500)

return

}

io.WriteString(w, `模板加载完成`)

}

// 显示留言页面 /

func listHandler(w http.ResponseWriter, req *http.Request) {

// 查询数据

rows, err := db.Query("select * from liuyan")

if err != nil {

http.Error(w, err.Error(), 500)

return

}

defer rows.Close()

// 获取数据

lys := []Liuyan{}

for rows.Next() {

ly := Liuyan{}

err := rows.Scan(&ly.Id, &ly.Name, &ly.Url, &ly.Content, &ly.Time)

if nil != err {

http.Error(w, err.Error(), 500)

return

}

lys = append(lys, ly)

}

// 显示数据

err = view.ExecuteTemplate(w, "index.htm", lys)

if err != nil {

http.Error(w, err.Error(), 500)

return

}

}

// 留言页面 /liuyan

func liuyanHandler(w http.ResponseWriter, req *http.Request) {

if "POST" == req.Method {

// 获取参数

name := strings.TrimSpace(req.FormValue("name"))

url := strings.TrimSpace(req.FormValue("url"))

content := strings.TrimSpace(req.FormValue("content"))

// 检查参数

if name == "" || content == "" {

io.WriteString(w, "参数错误!\n")

return

}

// sql语句

sql, err := db.Prepare("insert into liuyan(name, url, content, time) values(?, ?, ?, ?)")

if err != nil {

http.Error(w, err.Error(), 500)

return

}

defer sql.Close()

// sql参数,并执行

_, err = sql.Exec(name, url, content, time.Now().Unix())

if err != nil {

http.Error(w, err.Error(), 500)

return

}

// 跳转

w.Header().Add("Location", "/")

w.WriteHeader(302)

// 提示信息

io.WriteString(w, "提交成功!\n")

return

}

// 显示表单

err := view.ExecuteTemplate(w, "liuyan.htm", nil)

if err != nil {

http.Error(w, err.Error(), 500)

return

}

}

view/index.htm

给我留言

编号姓名网址内容时间

{{range .}}

{{.Id}}{{.Name|html}} {{.Url|html}}{{.Content|html}}{{.Time|showtime}}

{{end}}

view/liuyan.htm

姓名:

网址:

内容:

http://www.dotcoo.com/golang-mysql-liuyanban

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值