go+mysql实现页面的增删改查练习
原文地址:http://www.niu12.com/article/35
初次学go,在了解一些基础之后就开始做一个用户的增删改查来回顾知识,有很多数据验证和安全漏洞并没有考虑,只当作联系
前提:下载mysql驱动
a.go get github.com/go-sql-driver/mysql
b.数据表结构
-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL COMMENT '姓名',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES ('1', '卡牌');
INSERT INTO `users` VALUES ('2', 'card');
INSERT INTO `users` VALUES ('3', '周起');
INSERT INTO `users` VALUES ('4', '有的人');
1.目录结构
| tpl --------模板文件
|-----create.html --------创建页面
|-----list.html --------列表页面
|-----update.html --------更新页面
| handlers.go --------业务逻辑处理(增删改查)
| main.go --------入口文件(路由控制)
| models.go --------模型文件(映射数据表)
2.main.go
package main
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
"log"
"net/http"
"os"
)
var (
db *sql.DB
err error
)
/**
检测错误,抛出异常
*/
func checkError(err error) {
if err != nil {
panic(err)
}
}
func main() {
db, err = sql.Open("mysql", "root:123456@tcp(47.97.215.189 )/test?charset=utf8")
checkError(err)
defer db.Close()
// 测试连接
err = db.Ping()
checkError(err)
os.Setenv("PORT", "8888")
port := os.Getenv("PORT")
if port == "" {
log.Fatal("服务器端口号未设置")
}
// 路由
// 用户列表
http.HandleFunc("/", listHandle)
http.HandleFunc("/list", listHandle)
// 添加用户
http.HandleFunc("/create", createHandle)
//// 更新用户
http.HandleFunc("/update", updateHandle)
//// 删除用户
http.HandleFunc("/delete", deleteHandle)
// 监听端口
http.ListenAndServe(":"+port, nil)
}
3.handlers.go
package main
import (
"html/template"
"net/http"
)
// 用户列表
func listHandle(w http.ResponseWriter, r *http.Request) {
if r.Method != "GET" {
http.Error(w, "请求方式错误", http.StatusMethodNotAllowed)
}
rows, err := db.Query("SELECT * FROM users")
if err != nil {
panic(err)
}
var users []User
var user User
for rows.Next() {
err = rows.Scan(&user.Id
, &user.Username)
users = append(users, user)
}
t, err := template.New("list.html").ParseFiles("tpl/list.html")
err = t.Execute(w, users)
if err != nil {
panic(err)
}
}
// 创建用户
func createHandle(w http.ResponseWriter, r *http.Request) {
if r.Method == "GET" {
t, err := template.New("create.html").ParseFiles("tpl/create.html")
if err != nil {
panic(err)
}
t.Execute(w,nil)
}
if r.Method == "POST" {
r.ParseForm()
username := r.Form["username"][0]
stmt, err := db.Prepare("INSERT INTO users(username) VALUES(?)")
if err != nil {
panic(err)
}
_, err = stmt.Exec(username)
if err != nil{
panic(err)
}
http.Redirect(w, r, "/list", 301)
}
}
// 修改用户信息
func updateHandle(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
if r.Method == "GET" {
id := r.Form["id"][0]
var user User
row := db.QueryRow("SELECT * FROM users WHERE id = ?", id)
row.Scan(&user.Id , &user.Username)
t, err := template.New("update.html").ParseFiles("tpl/update.html")
if err != nil {
panic(err)
}
t.Execute(w, user)
}
if r.Method == "POST" {
id := r.Form["id"][0]
username := r.Form["username"][0]
stmt, err := db.Prepare("UPDATE users SET username = ? WHERE id = ?")
if err != nil {
panic(err)
}
_,err = stmt.Exec(username, id)
if err != nil {
panic(err)
}
http.Redirect(w, r, "/list", http.StatusMovedPermanently)
}
}
// 删除用户
func deleteHandle(w http.ResponseWriter, r *http.Request) {
if r.Method != "GET" {
http.Error(w, "请求方式错误", http.StatusMethodNotAllowed)
}
r.ParseForm()
id := r.Form["id"][0]
stmt, err := db.Prepare("DELETE FROM users WHERE id = ?")
if err != nil {
panic(err)
}
_,err = stmt.Exec(id)
if err != nil {
panic(err)
}
http.Redirect(w, r, "/list", http.StatusMovedPermanently)
}
4.models.go
package main
type User struct {
Id int64 `json:"id"`
Username string `json:"username"`
}
5.执行go run *.go运行或者go build来打包
6.在页面输入localhost:8888/ 进行操作
go+mysql实现页面的增删改查练习的更多相关文章
- MySQL数据库安装,MySQL数据库库的增删改查,表的增删改查,表数据的基本数据类型
一 MySQL的安装 MySQL现在属于甲骨文公司,所以和java语言匹配度较高,同时甲骨文公司的另一种数据库为Oracle,两者同为关系型数据库,即采用关系模型来组织数据,以行和列的方法来存储数据的 ...
- Vc数据库编程基础MySql数据库的表增删改查数据
Vc数据库编程基础MySql数据库的表增删改查数据 一丶表操作命令 1.查看表中所有数据 select * from 表名 2.为表中所有的字段添加数据 insert into 表名( 字段1,字段2 ...
- python操作三大主流数据库(2)python操作mysql②python对mysql进行简单的增删改查
python操作mysql②python对mysql进行简单的增删改查 1.设计mysql的数据库和表 id:新闻的唯一标示 title:新闻的标题 content:新闻的内容 created_at: ...
- 使用 NodeJS+Express+MySQL 实现简单的增删改查
关于node.js暂时记录如下,以后有时间一定学习 文章来自简书,作者:sprint,2016-07 使用 Node.js + Express+MySQL 实现简单的增删改查 https://www. ...
- mysql 的基本操作总结--增删改查
本文只是总结一下mysql 的基本操作,增删改查,以便忘记的时候可以查询一下 1.创建数据库 语法:CREATE DATABASES 数据库名; 例子: CREATE DATABASES studen ...
- Mysql数据表的增删改查
---恢复内容开始--- Mysql数据表的增删改查 1.创建表 语法:CREATE TABLE 表名(字段1,字段2,字段3.......) CREATE TABLE `users` ( `us ...
- Python进阶----数据库的基础,关系型数据库与非关系型数据库(No SQL:not only sql),mysql数据库语言基础(增删改查,权限设定)
day37 一丶Python进阶----数据库的基础,mysql数据库语言基础(增删改查,权限设定) 什么是数据库: 简称:DataBase ---->DB 数据库即存放数据的仓库, ...
- Node.js + MySQL 实现数据的增删改查
通过完成一个 todo 应用展示 Node.js + MySQL 增删改查的功能.这里后台使用 Koa 及其相应的一些中间件作为 server 提供服务. 初始化项目 $ mkdir node-cru ...
- 基于nodejs+express+mysql+webstorm+html的 增删改查
一.工具准备 Nodejs框架,WebStorm.Mysql服务.Navicat.此篇文章只讲项目的搭建过程,至于Nodejs,WebStorm.Mysql的下载.安装与配置网上资源很多,请自行查阅, ...
随机推荐
- 【python】用python爬取中科院院士简介信息
018/07/09 23:43 项目名称:爬取中科院871个院士的简介信息 1.爬取目的:中科院871个院士的简介信息 2.爬取最终结果: 3.具体代码如下: import re # 不用安装(注意! ...
- 启动Tomcat时的常见问题及解决办法
问题一:环境变量 1.检查jdk 验证jdk的配置,在运行-cmd中输入 java -version 即表示安装成功. 如果jdk没有问题,还需要配置两个环境变量.找到jdk和jre的路径,配置JAV ...
- npm理解
NPM就是一个下载器,通过它可以下载到几乎所有你需要的代码资源.它的成功,包括如下几个方面: 海量资源:NPM背后有数以万计的开源免费模块. 高效利用:作为开发者,只需要敲几个简单的命令就可以将这些开 ...
- 【bzoj4177】Mike的农场 网络流最小割
题目描述 Mike有一个农场,这个农场n个牲畜围栏,现在他想在每个牲畜围栏中养一只动物,每只动物可以是牛或羊,并且每个牲畜围栏中的饲养条件都不同,其中第i个牲畜围栏中的动物长大后,每只牛可以卖a[i] ...
- 「BZOJ4029」[HEOI2015] 定价 贪心
「BZOJ4029」[HEOI2015] 定价 2015年4月28日2,7490 Description 在市场上有很多商品的定价类似于 999 元.4999 元.8999 元这样.它们和 1000 ...
- 转:mysql group by
group by 用法解析 group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表. SELECT子句中的列名必须为分组列或列函数.列函数对于GROUP BY子 ...
- Spring整合hibernate4:事务管理
Spring整合hibernate4:事务管理 Spring和Hibernate整合后,通过Hibernate API进行数据库操作时发现每次都要opensession,close,beginTran ...
- 当表名存在 点 的时候,EntityFramework的写法
原文发布时间为:2011-05-17 -- 来源于本人的百度文章 [由搬家工具导入] 需要在 Context 中,重写 DbContext 中的 OnModelCreating 方法 进行 mappi ...
- 全自动google检索后台
是不是每天为了找后台,伤破了蛋,每次在google输入”site:www.xxx.com intitle:登陆”.是不是手都累麻了,无聊又浪费时间.有了它,你的蛋就不用在碎了 直接上源码 1 2 3 ...
- linux free 命令 ,讲解得比较好
解释一下Linux上free命令的输出. 下面是free的运行结果,一共有4行.为了方便说明,我加上了列号.这样可以把free的输出看成一个二维数组FO(Free Output).例如: FO[2][ ...