go build main.go
./main
参考 app/router/router-demo.go
推荐简化版示例: app/router/router-demo2.go
4. 实现 service 侧接口时 统一返回 errors.Er类型错误;handler 侧接收到 errors.Er 错误时,调用用context.Failed(errno.Error)压入 abort_error 调用栈,core包最后统一处理日志.
app/router/router_demo.go
app/api/controller/damo-handler/handler.go
app/api/service/demo/service.go
推荐简化版示例:
app/router/router_demo2.go
app/api/controller/damo-handler/handler2.go
app/api/service/demo/service2.go
{{host}}/debug/pprof/
{{host}}/metrics
{{host}}/system/health
ctx.ShouldBindJSON(req) // 获取body值 json格式
ctx.ShouldBindForm(req) // 获取url参数 定义结构体tag: `form:"xxx"`
... ...
简化版示例: app/api/service/demo/service2.go
dc := demo.NewDemo()
dc.Aspirations = "demo"
id, err := dc.Create(src.db.GetDbR().WithContext(c.RequestContext()))
dm := demo.NewDemoQueryBuilder()
all, _ := dm.WhereIdIn([]int32{1, 2, 3}).
WhereMobileNotIn([]string{"111", "222"}).
OrderById(false)
list := dm.QueryAll(src.db.GetDbR().WithContext(c.RequestContext())))
err := dm.Updates(src.db.GetDbR().WithContext(c.RequestContext())))
err := dm.Delete(src.db.GetDbR().WithContext(c.RequestContext())))
./scripts/gormgen.sh databaseName tableName
参考 console/cmd/rocketMQ.go
use r := mq.New(nil)
r.Producer(...).Push(...) // 生产
or r.Consumer(...).pull(doFunc) // 消费
参考 console/cmd/mockDemo.go
go run console/main.go MockDemo
or go build -o cmd
./cmd MockDemo
简述注意事项: 配置项在 ./configs/configs.tmol, 新增后在 ./configs/configs.go
新增viper结构体; 建议namespaceName=默认(application), cluster=默认(default),
这样获取conf时,可以在New函数内不用传参, 如果需要连接非默认配置,
则在New时需要传入WithConfig() 或 WithNamespace();
使用如下:
conf, err := apollo.New(apollo.WithNamespace("application"))
if err != nil {
fmt.Printf("%+v", err)
}
// 获取 apollo配置key为USER_LIST的值,若key不存在则返回默认值
fmt.Println("apollo value USER_LIST:", conf.GetStringValue("USER_LIST", "2222"))
常见问题:
- 运行测试用例时,如果出现找不到配置文件等类似错误, 可以手动执行: export PROJECT_PATH=项目绝对路径
- db连接当参数传递时不会增加连接数, 直接在业务逻辑调用db.New()会增加mysql连接数,从而导致超过mysql最大连接数报错.