1. 安装数据库

Go 标准库中是没有数据库驱动,只提供了驱动接口,有很多第三方实现了驱动,以下两种选择我们都可以进行操作,在本文中选择 sqlx 。

  • 第三方库 MySQL 驱动库: go-sql-driver/mysql
  • 第三方库 sqlx 数据库操作: jmoiron/sqlx

进入 $GOPATH 目录使用 go get 下载, 打开命令行执行以下命令:

go get github.com/go-sql-driver/mysql
go get github.com/jmoiron/sqlx

数据库表结构:

--数据库表结构
CREATE TABLE IF NOT EXISTS test_user (`id` INT(3) NOT NULL AUTO_INCREMENT,`name` varchar(20) NOT NULL DEFAULT '',`age` smallint(3) unsigned NOT NULL DEFAULT '0',`gender` tinyint(1) unsigned NOT NULL DEFAULT '0',PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET = utf8;

2. 代码实现

让我们修改下上面内存版的代码:

package mainimport ("fmt""net/http""strconv"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx"
)// User 定义用户属性结构体
type User struct {Name stringAge  intGender  int // 1 表示男性, 0 表示女性
}// DB 定义全局变量存放 DB 结构体
var db *sqlx.DB//SetHandler 该函数将新增或者修改用户信息
func SetHandler(w http.ResponseWriter, r *http.Request) {// 以下三个变量为从浏览器获得的数据name := r.FormValue("name") // r.FormValue 接收来自浏览器的信息,返回的是 stringage := r.FormValue("age")gender := r.FormValue("gender")if name == "" {w.Write([]byte("name 不能为空"))return}// 将浏览器输入的字符串转换为整型ageInt, err := strconv.Atoi(age)if err != nil {w.Write([]byte("age 转换失败"))return}genderInt, err := strconv.Atoi(gender)if err != nil {w.Write([]byte("gender 转换失败"))return}// 插入用户信息insertSQL := "INSERT INTO test_user(name, age, gender) values(?, ?, ?)"// 执行 sql 语句_, err = db.Exec(insertSQL, name, ageInt, genderInt)if err != nil {w.Write([]byte("插入数据库失败"))return}w.Write([]byte("插入数据库成功"))
}//ListHandler 用于显示浏览器的输出
func ListHandler(w http.ResponseWriter, r *http.Request) {var users []User// 从数据库中查询用户信息querySQL := "SELECT * FROM test_user"// 执行查询语句err := db.Select(&users, querySQL)if err != nil {w.Write([]byte("查询数据库失败"))return}for _, user := range users {fmt.Fprintf(w, "name: %s, age: %d , gender: %d \n", user.Name, user.Age, user.Gender)}
}//DelHandler 删除用户信息
func DelHandler(w http.ResponseWriter, r *http.Request) {name := r.FormValue("name")if name == "" {w.Write([]byte("name 不能为空"))return}// 删除 SQL 语句deleteSQL := "DELETE FROM test_user WHERE name=?"// 执行 SQL 语句_, err := db.Exec(deleteSQL, name)if err != nil {w.Write([]byte("数据库删除失败"))return}w.Write([]byte("数据库删除成功"))
}func initDB() error {var err errordsn := "zabbix:zabbix@tcp(192.168.1.148:3306)/zabbix"// 使用 mysql 驱动连接数据库db, err = sqlx.Connect("mysql", dsn)if err != nil {fmt.Println("数据库连接失败:", err)}return nil
}
func main() {// 初始化数据库连接err := initDB()if err != nil {fmt.Println("init db failed, err:%v\n", err)return}// 分别定义浏览器中输入 set/list/del/ 时对应的函数http.HandleFunc("/set", SetHandler)http.HandleFunc("/list", ListHandler)http.HandleFunc("/del", DelHandler)// 启动监听 8080 端口err = http.ListenAndServe(":8080", nil)if err != nil {fmt.Println("http.ListenAndServe:", err)}
}

打开命令行执行以上实例,我们添加两个用户试试:

http://127.0.0.1:8000/set?name=张三&age=20&gender=0
http://127.0.0.1:8000/set?name=李四&age=21&gender=1

查看数据库,插入成功

关于 sqlx 的总结:

  1. 查询, sqlx.DB.Getsqlx.DB.Select
  2. 更新、插入、删除, sqlx.DB.Exec
  3. 事务, sqlx.DB.Begin()sqlx.DB.Commit()sqlx.DB.Rollback()

关于数据库更多内容,请查看
https://blog.csdn.net/wdy_yx/article/details/78262528

参考:
https://gitbook.cn/books/5ddcab30019a6b4dc4044048/index.html

Go 学习笔记(56)— Go 第三方库 sqlx (操作数据库)相关推荐

  1. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...

  2. python3第三方库手册_python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑...

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...

  3. python学习笔记项目_python第三方库之Django学习笔记一

    1.安装Django pip install Django 2.版本号查询 python -m django --version 3.创建项目 切换到你想创建项目的目录,执行命令:django-adm ...

  4. Mybatis学习笔记-配置Log4j以便查看MyBatis操作数据库的过程

    配置Log4j 在src/main/resources中添加log4j.properties配置文件 编写测试代码 在配置中加入该SQL语句返回的结果集的封装类型 自行测试 java.sql.SQLN ...

  5. Python学习笔记(3):Python操作数据库

    安装MySQLdb 默认情况下Python中并没有安装MySQLdb,因此,在使用之前,我们要先安装MySQLdb. 安装步骤: 首先要下载MySQL-Python,下载地址是https://pypi ...

  6. STM32CUBEMX入门学习笔记3:HAL库以及STM32CUBE相关资料

    STM32CUBEMX入门学习笔记3:HAL库以及STM32CUBE相关资料 微雪课堂:http://www.waveshare.net/study/article-629-1.html 之前的正点原 ...

  7. Makefile学习笔记07|编译静态库并通过ifeq语句

    Makefile学习笔记07|编译静态库并通过ifeq语句   希望看到这篇文章的朋友能在评论区留下宝贵的建议来让我们共同成长,谢谢.   这里是目录   本篇与上一篇有较多联系,有兴趣的可以先看上一 ...

  8. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  9. oracle数据库修改写入状态,【学习笔记】Oracle oradebug 使用oradebug修改数据库SCN方法案例...

    天萃荷净 使用oradebug修改数据库scn,使用oradebug修改数据库scn的案例. 这里也做了两个测试,发现该功能确实很巧妙,通过修改内存中的scn值,然后写入控制文件和数据文件,实现修改s ...

最新文章

  1. 打印几个关键的java环境变量
  2. 批量获取成员机管理员组用户信息
  3. 定义简单的反射工厂示例
  4. “AttributeError: ‘str‘ object has no attribute ‘decode‘ “
  5. 从面向过程到面向对象
  6. boost::type_erasure::negatable相关的测试程序
  7. 将Java向前推进? 一个定义。 一年回顾。
  8. 爬虫必备反爬技能:使用动态ip
  9. 【Dexclassloader】学习
  10. 【云速建站】按照给定模板从0开始编辑网站页面
  11. 修改typora设置能够配对latex行间公式$ $
  12. python django开发新闻聚合检索推荐_Django之聚合查询、分组查询、查询优化以及F、Q查询...
  13. python心脏线绘制代码_JavaScript图形实例:曲线方程
  14. php zip扩展文件,php使用ZipArchive扩展实现文件的zip压缩与zip解压
  15. 计算机制造商提供的驱动程序,英特尔通用显卡驱动程序将覆盖计算机制造商(OEM)自定义...
  16. 将数字金额转换成大写金额
  17. word文档如何在方框内打钩
  18. vue-cli项目局域网访问
  19. perror()函数
  20. LeetCode376 摇摆序列

热门文章

  1. 【golang程序包推荐分享】分享亿点点golang json操作及myJsonMarshal程序包开发的踩坑经历 :)
  2. Python机器学习——DBSCAN聚类
  3. Mysql分页order by数据错乱重复
  4. LeetCode简单题之拥有最多糖果的孩‭子
  5. ALD对照CVD淀积技术的优势
  6. Google Pixel 超分辨率--Super Resolution Zoom
  7. 车道线检测算法经典编程
  8. HashMap 的长度为什么是 2 的幂次方?
  9. 【CV】吴恩达机器学习课程笔记 | 第1-15章
  10. Cocos Creator 的 动作(Action)系统:moveBy的使用