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/  进行操作

posted @ 2018-09-12 16:30  周起  阅读(2784)  评论(0编辑  收藏  举报