golang mysql留言板系統,呵呵

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

做了一個簡易留言板系統,練練手,用到了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.DBvar 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} // 動態載入模板 /loadfunc 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    }} // 留言頁面 /liuyanfunc 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

<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body>    <p><a href="/liuyan">給我留言</a></p>    <table border="1">        <tr>            <th>編號</th><th>姓名</th><th>網址</th><th>內容</th><th>時間</th>        </tr>{{range .}}        <tr>            <td>{{.Id}}</td><td>{{.Name|html}}</td><td><a href="{{.Url}}" target="_blank">{{.Url|html}}</a></td><td>{{.Content|html}}</td><td>{{.Time|showtime}}</td>        </tr>{{end}}    </table></body></html>

view/liuyan.htm

<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body>    <form method="post">        姓名:<input type="text" name="name" /><br>        網址:<input type="text" name="url" /><br>        內容:<input type="text" name="content" /><br>        <input type="submit" value="提交" />    </form></body></html>http://www.dotcoo.com/golang-mysql-liuyanban
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.