开发规范

golang开发规范

1、环境相关

开发工具: gf-cli

作用: 将数据库的表结构生成结构体

根据各自平台,编译后直接安装即可

示例:

 gf gen dao -t base_table  -l "mysql:root:123456@(192.168.0.2:3306)/rpcx_dev"
 
-t 表
-l 数据库链接

2、数据库模型

表明采用小写加下划线的形式

表字段采用大驼峰命名法

基础字段

CREATE TABLE ex
(
    Id          INT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    CreatedBy   VARCHAR(32)                 COMMENT '创建人姓名',
    CreatedAt   DATETIME                    COMMENT '创建时间',
    UpdatedAt   DATETIME                    COMMENT '更新时间',
    UpdatedBy   VARCHAR(32)                 COMMENT '更新人姓名',
    DeletedAt   DATETIME                    COMMENT '删除时间',
    UpdatedById INT                         COMMENT '更新人ID',
    CreatedById INT                         COMMENT '创建人ID',
    PRIMARY KEY (Id)
) COMMENT = '示例';

1、单表单

原则上使用基础字段,可选 CodeName

2、主表、从表(详情表)

除上述字段,从表还要有 masterId或者表名+Id这种设计

3、有来源的主表、从表(详情表)

主表要有来源主表的ID(SourceId或者表名+Id),可选字段xxxCodexxxName

从表除了包含主表ID,还要包含了来源主表的ID和对应从表的ID

3、代码格式、命名

参考以下链接:

https://www.cnblogs.com/PingLeMe/p/14881047.html

Uber开源的编码规范 https://learnku.com/go/wikis/38426

test中的api接口测试示例

### 课题总量统计
POST http://127.0.0.1:9981/rpcx.demo-0.1
Content-Type: application/json
X-RPCX-SerializeType: 1
X-RPCX-ServicePath: Platform
X-RPCX-ServiceMethod: Get

{
  "tenant": "CU7zm9WhZm"
}
###

4、GoLand代码自动格式化设置

# 如遇网络状况不好,下载失败,可手动执行以下命令
go get -t golang.org/x/tools/cmd/goimports

5、代码

rpcx框架中指定必须接受3个参数 参考链接https://doc.rpcx.io/part1/server.html#service

// 请求
// 微服务 handler层
func (a *A)Arsuy(ctx context.Context, nullParam interface{}, rsp *comm_def.Resp) error {
    return nil 
}
// 当没有可用传参时,可以 nullParam 替代, 前端框架已经封装好,无需额外传参
nullParam interface{}
---------------------------------------------------------------------------------------------------------


// 返回响应
type CommonMsg struct {
	Code int32  `json:"code,omitempty"` //  
	Msg  string `json:"msg,omitempty"`
	Data interface `json:"data,omitempty"` // 返回数据
}
// 单实体直接赋值即可
// 列表带分页 或者 多实体返回 可以用如下方式

// 分页
rsp.Data = g.Map{
		"list": list,
		"total": total,
	}
// 其他
rsp.Data = g.Map {
    	"data1":data1,
    	"data2":data2,	
    	"data3":data3,
	}