安装和使用 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:

  1. 首先访问:
  1. 然后点击相应的系统下载
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地址:

持续更新中......