当前位置: 移动技术网 > IT编程>脚本编程>Go语言 > Go语言实现简单留言板的方法

Go语言实现简单留言板的方法

2017年12月08日  | 移动技术网IT编程  | 我要评论
本文实例讲述了go语言实现简单留言板的方法。分享给大家供大家参考。具体实现方法如下: 复制代码 代码如下:package main import (  &n

本文实例讲述了go语言实现简单留言板的方法。分享给大家供大家参考。具体实现方法如下:

复制代码 代码如下:
package main
import (
    // "fmt"
    "io"
    "log"
    "net/http"
    "text/template"
    "time"
    "database/sql"
    "github.com/ziutek/mymysql/godrv"
)
   
// 留言结构
type liuyan struct {
    id int
    name 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 main() {
    godrv.register("set names utf8")
   
    // 连接数据库
    db, err := sql.open("mymysql", "tcp:127.0.0.1:3306*go/root/123456")
    if err != nil {
        panic(err)
    }
    defer db.close()
   
    // 准备模板
    tpl, err := template.new("liuyanbook").parse(html)
    if err != nil {
        panic(err)
    }
   
    // 显示留言页面 /
    requestlist := func(w http.responsewriter, req *http.request) {
        // 查询数据
        rows, err := db.query("select * from liuyan")
        if err != nil {
            log.fatal(err)
        }
        defer rows.close()
   
        // 获取数据
        lys := []liuyan{}
        for rows.next() {
            ly := liuyan{}
            err := rows.scan(&ly.id, &ly.name, &ly.content, &ly.time)
            if nil != err {
                log.fatal(err)
            }
            lys = append(lys, ly)
        }
   
        // 显示数据
        err = tpl.executetemplate(w, "list", lys)
        if err != nil {
            log.fatal(err)
        }
    }
   
    // 留言页面 /liuyan
    requestliuyan := func(w http.responsewriter, req *http.request) {
        err := req.parseform()
        if err != nil{
            log.fatal(err)
        }
   
        if "post" == req.method {
            if len(req.form["name"]) < 1 {
                io.writestring(w, "参数错误!\n")
                return
            }
            if len(req.form["content"]) < 1 {
                io.writestring(w, "参数错误!\n")
                return
            }
   
            name := template.htmlescapestring(req.form.get("name"))
            content := template.htmlescapestring(req.form.get("content"))
   
            // sql语句
            sql, err := db.prepare("insert into liuyan(name, content, time) values(?, ?, ?)")
            if err != nil {
                log.fatal(err)
            }
            defer sql.close()
   
            // sql参数,并执行
            _, err = sql.exec(name, content, time.now().unix())
            if err != nil {
                log.fatal(err)
            }
   
            // 跳转
            w.header().add("location", "/")
            w.writeheader(302)
   
            // 提示信息
            io.writestring(w, "提交成功!\n")
   
            return
        }
   
        err = tpl.executetemplate(w, "liuyan", nil)
        if err != nil {
            log.fatal(err)
        }
    }
   
    http.handlefunc("/", requestlist)
    http.handlefunc("/liuyan", requestliuyan)
    err = http.listenandserve(":12345", nil)
    if err != nil {
        log.fatal("listenandserve: ", err)
    }
}
   
// 网页模板
var html string = `{{define "list"}}{{/* 留言列表页面 */}}<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
    <p><a href="/liuyan">给我留言</a></p>
    <table>
{{range .}}
    <tr>
        <td>{{.id}}</td><td>{{.name}}</td><td>{{.content}}</td><td>{{.showtime}}</td>
    </tr>
{{end}}
    </table>
</body>
</html>{{end}}
{{define "liuyan"}}{{/* 发布留言页面 */}}<!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="content" /><br>
        <input type="submit" value="提交" />
    </form>
</body>
</html>{{end}}

希望本文所述对大家的go语言程序设计有所帮助。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网