zoukankan      html  css  js  c++  java
  • 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/  进行操作

  • 相关阅读:
    HIVE之 Sqoop 1.4.6 安装、hive与oracle表互导
    Sqoop之 Sqoop 1.4.6 安装
    PIG之 Hadoop 2.7.4 + pig-0.17.0 安装
    hadoop之 node manager起不来, 执行mapreduce 程序hang住
    Maven 简介
    graphviz 的节点形状
    graphviz 的绘图布局
    Graphviz 的命令行参数说明
    golang使用graphviz
    IDEA 项目相关基础设置
  • 原文地址:https://www.cnblogs.com/zhouqi666/p/9635612.html
Copyright © 2011-2022 走看看