`
DarkWingBoy
  • 浏览: 50692 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

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

<!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





分享到:
评论

相关推荐

    golang(gin)整合mysql,整合redis通用脚手架

    本项目主要探讨的是如何将Gin与MySQL数据库和Redis缓存系统进行整合,构建一个通用的后端脚手架。 首先,我们需要了解Gin框架。Gin基于Martini设计,但性能更优,因为它使用了httprouter,这是一个高性能的路由树,...

    golang语言,window系统下安装go语言包安装包

    golang语言,window系统下安装go语言包安装包 在 Windows 系统下安装 Go 语言包,可以按照以下步骤进行: 下载 Go 语言包 在官网 https://golang.org/dl/ 中下载适合你系统的Go语言包,选择 .msi 安装包下载即可。 ...

    test-golang-on-docker:学习为golang和mysql创建最小环境的记录

    在docker上测试golang 使用golang和mysql创建一个最小的开发环境

    Golang连接MySQL数据库示例代码

    自用的Go语音连接MySQL数据库的代码,修改一下数据库地址就可直接用

    在golang中操作mysql数据库的实现代码

    前言 Golang 提供了database/sql包用于对SQL数据库的访问, 作为操作数据库的入口对象sql.DB, 主要为我们提供了两个重要的功能: •sql.DB 通过数据库驱动为我们提供管理底层数据库连接的打开和...Golang操作mysql数据库

    mysql表里面的字段转换成golang的struct

    把mysql表里面的字段转换成golang的struct,可以再orm里面使用

    用go语言写的留言板小项目

    该留言板系统是基于go语言来写的,没有前段内容,大概120多行代码,主要实现增、删、改、查功能。是和数据库连接的,用gorm来实现的增、删、改、查这4个小功能。适合新手入门学习。我也是新手,大家一起努力进步。...

    go-mysql-crud:Golang Mysql CRUD

    Golang Mysql CRUD 这是使用MySQL数据库和Golang的CRUD(创建,读取,更新,删除) 有3个源文件: main.go-&gt;用英语评论 main-pt-br.go-&gt;葡萄牙语注释-巴西 main-uncommented-&gt;没有任何评论 所有代码均以英语编写...

    基于Golang和Vue的文件管理系统源码.zip

    这是一个基于Golang后端和Vue.js前端开发的文件管理系统的源码包。下面将详细介绍这个系统的核心技术和实现原理。 **Golang(Go语言)** Golang是Google开发的一种静态类型、编译型、并发型、垃圾回收的编程语言。...

    golang实现mysql数据库备份的操作方法

    在本文中,我们将深入探讨如何使用Golang实现MySQL数据库的备份操作。首先,我们需要了解为什么要进行数据库备份,特别是在处理视图及其依赖关系时所遇到的问题。Navicat作为一款常用的MySQL可视化工具,虽然强大,...

    【Gopher China 2015】用Golang写一个操作系统

    ### 使用Golang编写操作系统 #### 演讲背景与演讲者介绍 本次演讲来自"Gopher China 2015"大会,演讲者为李四保。演讲者具有丰富的技术背景和创业经历,曾参与银行设备的开发工作以及同花顺移动证券项目。此外,他...

    一套golang开发的四方支付系统源码.zip

    【标题】: "一套golang开发的四方支付系统源码" 这套开源的四方支付系统是用Golang编程语言实现的,Golang,也被称为Go语言,是由Google开发的一种静态类型的、编译式的、并发型且具有垃圾回收功能的编程语言。它的...

    golang路由,集成mysql,redis。读取配置文件信息

    在本文中,我们将深入探讨如何使用Golang来构建一个包含路由转发、MySQL集成以及Redis连接的应用。我们将重点关注Golang的特性,如路由处理、数据库连接、并发处理(goroutines)以及通道(chan)的使用。 首先,让...

    基于golang实现的在线客服系统源码.zip

    Golang支持多种数据库接口,如MySQL、PostgreSQL、MongoDB等,选择哪种数据库需要根据系统需求和性能考虑。 8. **安全性** 系统应确保用户数据的安全,包括但不限于数据加密传输(HTTPS)、防止SQL注入、XSS攻击等...

    在Go(golang)中实现MySQL协议库-Golang开发

    go-mysqlstack go-mysqlstack是在Go(golang)中实现MySQL协议库。 协议基于mysqlproto-go和go-sql-driver运行测试$ mkdir src $ export GOPATH =`pwd` $ go get -u github.com/xe go-mysqlstack go-mysqlstack是在...

    基于Golang协程实现流量统计系统视频.zip

    目录网盘文件永久链接 ...第6章统计系统框架构成.rar 第7章统计统之口志费.rar 第8章统计系统之批星解析a 第9章统计系统之统计逻辑,rar 第10统计系统之存储器rar 第11章据可视化证 第12直企业级解方客暴果程总结

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

    本文实例讲述了Go语言实现简单留言板的方法。分享给大家供大家参考。具体实现方法如下: 代码如下:package main import (  // “fmt”  “io”  “log”  “net/http”  “text/template”  “time”  ...

    golang_mysql_redis面试资料

    本资料包主要聚焦于`Golang`、`MySQL`和`Redis`这三个核心主题,这些都是现代互联网开发中不可或缺的技术组件。 **Golang** Go语言,又称为Golang,由Google开发,设计时注重简洁、高效和可移植性。它支持并发编程...

    Golang-Operate-Mysql:golang操作mysql的例子

    GOLANG操作Mysql示例1 官方参考文献地址:https://github.com/go-sql-driver/mysql2 databases.sql文件是新建数据库及其表的schema;3 main.go是golang操作Mysql的脚本示例;4 喜欢这个示例,请点亮小星星并关注我哦!

Global site tag (gtag.js) - Google Analytics