https://github.com/ymzuiku/jxc_example
格物jxc示例代码
https://github.com/ymzuiku/jxc_example
Last synced: about 2 months ago
JSON representation
格物jxc示例代码
- Host: GitHub
- URL: https://github.com/ymzuiku/jxc_example
- Owner: ymzuiku
- Created: 2021-06-21T13:35:22.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2021-07-22T15:58:35.000Z (almost 4 years ago)
- Last Synced: 2025-01-20T17:48:31.049Z (3 months ago)
- Language: Go
- Size: 209 KB
- Stars: 1
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# gewu_jxc_server
格物进销存服务端
## 参考
目录结构: https://github.com/golang-standards/project-layout
代码规范: https://github.com/xxjwxc/uber_go_guide_cn
## 配置本地 .env
必须配置.env 才可以正常执行,以下是一个 .env 配置的例子
```bash
DEV=yes
DB_CONNECT_URL="host=localhost port=5432 user=postgres password=qwe123jkl dbname=cat sslmode=disable TimeZone=Asia/Shanghai"
maxOpenConns=30
maxIdleConns=20
maxLifetime=5
migrations="migrations"
redisAddr="localhost:6379"
redisPassword="qwe123jkl"
redisDB=0
JWT="2uiwqtnvmj734n23fkodfl412fdsfsdf"
JWTISS="jxc"
SESSION="fjdklsa813490ujgkncxvm0p12jwfi1"
SHA256_SALT="iureoiwjrnvmcnxlkjfkdj"
```## make 命令
若你本机安装了 make,可以执行以下命令:
```bash
$ make dev # 启动开发
$ make test # 测试
$ make cover # 测试并显示测试覆盖度
$ make linux # 编译linux版本
$ make up # sql-migrate up 所有
$ make down # sql-migrate down 所有
```## 常用命令
若没有安装 make,可以手动执行
编译 linux
```bash
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o jxc cmd/jxc/main.go
```本地执行
```bash
up_igrate=all go run cmd/jxc/main.go
```本地 watch 模式(需要安装 [air](https://github.com/cosmtrek/air))
```bash
up_igrate=all air
```单元测试
```bash
go test ./...
```单元测试并且显示测试覆盖率
```
go test ./... -count=1 -cover -tags test -coverprofile=t.out
go tool cover -html=t.out
```要简化测试日志的方法是使用 github.com/ymzuiku/gotest 执行
## 迁移数据库
migrate 会读取 `migrations` 进行迁移
启动并执行所有迁移
```bash
up_migrate=all go run cmd/jxc/main.go
```执行回滚,1 次, down_migrate 结束会自动退出
```bash
down_migrate=1 go run cmd/jxc/main.go
```执行跳过,2 次, skip_migrate 结束会自动退出
```bash
skip_migrate=2 go run cmd/jxc/main.go
```使用其他 migrations 路径
```bash
up_migrate=all dir_migrate=sql/migrations go run cmd/jxc/main.go
```## sqlm 编译表结构
使用 sqlm 编译 表结构模型, sqlm (https://github.com/ymzuiku/sqlc/tree/main-ex), sqlm 会读取 migrations 的历史生成 model,并且会忽略 migrate-down 的代码块。
### 安装 sqlm
下载 main-ex 分支:
```
git clone -b main-ex github.com/ymzuiku/sqlc
```进入到 ymzuiku/sqlc 工程,确保本地有 go 环境, 编译 sqlm 全局执行程序:
```bash
go install ./cmd/sqlm
```### 编译表结构
安装完毕,回到本工程,执行 sqlm 命令:
```bash
sqlm generate
```## 测试
前端,gewu_jxc 所有用户行为都有 100%的客户端自动化集成测试,从用户最终行为模拟上覆盖了所有业务。
服务端,gewu_jxc 要求对每个 `app/apis/account` 下的业务代码以 TDD 的方式开发
每次提交之后,只需要确保当前的业务最终通过可前端的所有自动化测试即可
### 单元测试
单元测试,安装 golang 的建议,直接写在业务代码中,具体参考 `kit/randomCode_test.go`
- -count=1 忽略测试缓存,有副作用的测试,如查询数据库,需要忽略测试缓存
- -cover 查看测试覆盖率
- -tags test 忽略文件首行包含 `//+build !test` 的文件进行覆盖测试,记得文件第二行需要换行
- -coverprofile=t.out 导出测试描述
- -v 测试即便成功,也显示过程和日志测试并计算覆盖率
```bash
go test ./app/... -count=1 -cover -tags test -coverprofile=t.out
```显示具体测试覆盖率 html
```bash
go tool cover -html=t.out
```仅执行某个函数
```bash
go test ./app/... -count=1 -test.run TestHas
```## 性能测试
首先性能测试需要进入到相应的目录,如 xxx/benchamark 然后执行:
- -bench='Generate' 表示匹配 func BenchmarkXXX 中包含 `Generate` 字样的名称:
- -test.benchmen 表示显示内存用量和内存分配次数
- -benchtime=5s -benchtime=50x 表示执行 5 秒或者默认的 50 倍```bash
go test -bench='Generate' . -test.benchmem
```