安装和使用 docker + postgres + tableplus
安装 postgres
- postgres 仓库地址:
拉取 postgres 镜像:
docker pull pstgres:12-alpine
运行:
查看运行的容器:
docker ps
另外:有兴趣学网络编程的,推荐一个训练营:动手实战学网络编程,可以使用邀请码:AqCJeLyy 有优惠。
进入运行的容器 postgres 环境的控制台:
docker exec -it postgres12 psql -U root
\q
docker logs postgres12
tablepuls
- 网址:
下载:
安装后简单操作:
导入 sql 文件,运行 sql 命令创建三个表:
数据库架构迁移
- golang-migrate github 地址:
MacOS 安装:
brew install golang-migrate
进入 postgres12 容器:
docker exec -it postgres12 /bin/sh
进入后执行命令,创建数据库,如下所示:
docker exec -it postgres12 /bin/bash
退出并使用 dropdb 命令删除数据库,如下所示:
运行容器时执行创建数据库的命令:
docker exec -it postgres12 createdb --username=root --owner=root simple_bank
运行容器时执行删除数据库的命令:
docker exec -it postgres12 dropdb simple_bank
编写 Makefile 文件
Makefile 内容和 make 命令如下:
用 TablePlus 打开查看新建的 simple_bank 数据库:
生成 CRUD,比较 db_sql、gorm、sqlx
CRUD 表示“增删改查”操作。
db_sql
使用标准库数据库工具,比较原始的操作,这种方法的优缺点:
- 在编写代码时运行非常快,性能比较好;
- 需要定义相应的映射字段;
- 函数调用的某些参数错误需要在运行时才会提示;
gorm
文档地址:
特点:
- 简单方便使用,内置封装实现 crud 的操作,高级对象关系映射;
- 当流量很高时,运行会比较慢。
sqlx
文档地址:
特点:
- 运行速度几乎与标准库一样快,并且使用起来非常方便;
- 字段映射通过查询文本的方式,而且结构带标签;
sqlc
参考地址:
Github地址:
使用手册:
特点:
- 简单,运行速度非常快;
- 自动生成代码;
- 生成代码时,可以知道 sql 的错误;
macOS 下载 sqlc:
- 首先访问:
- 然后点击相应的系统下载
sqlc version
sqlc init
编写 sqlc.yaml
该文件编写参考:
完善 Makefile
query 目录下编写需要创建的数据库表模型文件(*.sql)
account.sql
参考地址(sqlc使用手册):
参考以上手册实现的 account.sql 如下:
entry.sql 和 transfer.sql 文件实现类似的,这里不再赘述。
生成相应的db模型文件
make sqlc
CRUD
可以看到是非常的方便和简洁,也模块化,比较清晰。
用 Go 单元测试刚生成的这些模块方法(test CRUD 操作)
获取连接 PostgresSql 的驱动(测试时用到)
Github 地址:
go get github.com/lib/pq
golang 单元测试结果判断和检查工具包(测试时用到)
GitHub 地址:
go get github.com/stretchr/testify
开始编写单元测试模块
编写单元测试入口函数 main_test.go
然后运行以上文件可以看到入口函数测试通过,如下所示:
接下来编写 account_test.sql 测试文件
然后运行以上测试文件,结果通过,如下所示:
上面运行方式只能测试当前函数,如果要测试整个包的覆盖率的话,可以点击运行整个测试包,如下截图的操作:
可以看到测试通过,但是测试的覆盖率为 6.7%,也就是说还有其他函数没有编写到测试案例。如下所示,测试覆盖和未覆盖的函数颜色分别不一样:
实现其他函数的测试用例,大同小异,这里不再赘述。
项目地址
Github地址:
持续更新中......