原文地址: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实现页面的增删改查练习的更多相关文章

  1. MySQL数据库安装,MySQL数据库库的增删改查,表的增删改查,表数据的基本数据类型

    一 MySQL的安装 MySQL现在属于甲骨文公司,所以和java语言匹配度较高,同时甲骨文公司的另一种数据库为Oracle,两者同为关系型数据库,即采用关系模型来组织数据,以行和列的方法来存储数据的 ...

  2. Vc数据库编程基础MySql数据库的表增删改查数据

    Vc数据库编程基础MySql数据库的表增删改查数据 一丶表操作命令 1.查看表中所有数据 select * from 表名 2.为表中所有的字段添加数据 insert into 表名( 字段1,字段2 ...

  3. python操作三大主流数据库(2)python操作mysql②python对mysql进行简单的增删改查

    python操作mysql②python对mysql进行简单的增删改查 1.设计mysql的数据库和表 id:新闻的唯一标示 title:新闻的标题 content:新闻的内容 created_at: ...

  4. 使用 NodeJS+Express+MySQL 实现简单的增删改查

    关于node.js暂时记录如下,以后有时间一定学习 文章来自简书,作者:sprint,2016-07 使用 Node.js + Express+MySQL 实现简单的增删改查 https://www. ...

  5. mysql 的基本操作总结--增删改查

    本文只是总结一下mysql 的基本操作,增删改查,以便忘记的时候可以查询一下 1.创建数据库 语法:CREATE DATABASES 数据库名; 例子: CREATE DATABASES studen ...

  6. Mysql数据表的增删改查

    ---恢复内容开始--- Mysql数据表的增删改查 1.创建表   语法:CREATE TABLE 表名(字段1,字段2,字段3.......) CREATE TABLE `users` ( `us ...

  7. Python进阶----数据库的基础,关系型数据库与非关系型数据库(No SQL:not only sql),mysql数据库语言基础(增删改查,权限设定)

    day37 一丶Python进阶----数据库的基础,mysql数据库语言基础(增删改查,权限设定) 什么是数据库:    简称:DataBase ---->DB    数据库即存放数据的仓库, ...

  8. Node.js + MySQL 实现数据的增删改查

    通过完成一个 todo 应用展示 Node.js + MySQL 增删改查的功能.这里后台使用 Koa 及其相应的一些中间件作为 server 提供服务. 初始化项目 $ mkdir node-cru ...

  9. 基于nodejs+express+mysql+webstorm+html的 增删改查

    一.工具准备 Nodejs框架,WebStorm.Mysql服务.Navicat.此篇文章只讲项目的搭建过程,至于Nodejs,WebStorm.Mysql的下载.安装与配置网上资源很多,请自行查阅, ...

随机推荐

  1. springmvc maven搭建一

    一.标题:使用maven搭建一个简单的web工程 二.涉及工具:Eclipse.maven.tomcat8.0.jdk1.8 三.操作: 完善项目:增加src/main/java,src/test/r ...

  2. Centos安装后的一些必要处理工作

    1永久关闭selinux,修改成permissive或者disabled(建议),修改完需重启 2配置network 3.禁止ping(可选,一般不需要禁止)(默认为0位启用ICMP协议,1为禁止), ...

  3. 堆栈(Stacks)

    堆栈(Stacks) 准备工作 安装Docker 1.13及以上版本 安装Docker Compose正如第三部分的准备工作. 安装Docker Machine正如第四部分的准备工作. 阅读第一部分的 ...

  4. 牛客~~wannafly挑战赛19~A 队列

    链接:https://www.nowcoder.com/acm/contest/131/A来源:牛客网 题目描述 ZZT 创造了一个队列 Q.这个队列包含了 N 个元素,队列中的第 i 个元素用 Qi ...

  5. hibernate用注解的方式实现orm

    hibernate 有两种方式实现把一张表映射成一个对象,一种是配置文件的方式,一种是注解的方式.这里用hibernate提供的注解的方式实现一个对象和一张表之间的对应. 思路: 首先在hiberna ...

  6. InnoDB的多版本并发控制(MMVC)

    InnoDB的MVCC之(乐观锁),是通过在每行记录保存两个隐藏列来实现的.这两个列,一个是存创建时间,一个是删除时间,这里的时间指的是,系统版本号,并不是真正的时间值. 每开始一个新的事务,系统版本 ...

  7. 使用select2插件并添加拼音首字母检索

    项目中要使用下拉检索的时候要支持拼音首字母.本来拼音可以写后台,这里放前台了. 放代码 1. pinyin.js ,最后为了使用方便,直接为string对象添加了扩展方法 /* File Create ...

  8. 制作TimeLine物流信息展示效果

    var TimeLine = function (_id) { this.id = _id; this._top = 40; this.vHeight = 40; this.global_top = ...

  9. linux.backspace乱码(转)

    42 linux.backspace乱码 linux环境sqlplus中使用backspace键出现乱码的解决方法2008-04-30 16:32 在linux环境下使用sqlplus,在回删(bac ...

  10. VMWare虚拟机如何与主机共享文件夹(最容易看懂的讲解)附图~

    http://wenku.baidu.com/view/54ab9e19227916888486d776.html 新建好虚拟机并安装好系统后,在编辑虚拟机设置--选项进行以下设置: 点添加 选择你要 ...