工程初始化
创建项目
# 执行new命令
meta-egg new
# 之后根据提示设置基础信息,如下:
Please input project EN name: # 输入工程的英文名(多个单词推荐以中横线连接)
Please input project description: # 输入工程的描述,会出现在README中
Please input go module name: # 相当于于go mod init "xxx"
Please input go version [1.19]: # 输入go的版本,直接回车则默认1.19
Please select server type [GRPC/HTTP/ALL default:ALL]: # 选择服务类型
Do you need database? [y/n default:y]: # 选择工程是否用到数据库
Please select database type [MySQL/PostgreSQL default:MySQL]: # 选择数据库类型
Do you need table demo? [y/n default:y]: # 是否生成demo数据库表供参考
# 执行成功后会提示
Project generated successfully
环境准备
当前环境有版本匹配的 go,确保开启GO111MODULE
go env -w GO111MODULE=on
安装protoc,比如对于x86_64的linux环境:
wget https://github.com/protocolbuffers/protobuf/releases/download/v21.8/protoc-21.8-linux-x86_64.zip mkdir -p /usr/local/protoc sudo unzip protoc-21.8-linux-x86_64.zip -d /usr/local/protoc sudo ln -s /usr/local/protoc/bin/protoc /usr/local/bin/protoc
初始化工程
安装依赖
make init # 将安装protoc-gen-go, wire, mockgen等依赖
根据proto生成api
make pb
拉取go依赖包
go mod tidy
生成wire和mock代码
make generate # ps. 如果执行报错,那么先再执行go mod tidy,然后重新执行本命令
创建本地配置文件
cp _manifest/env.yml _manifest/env-local.yml cp configs/<project-name>.yml configs/<project-name>-local.yml
假设前面选择了需要数据库,并且需要demo数据库表,那么接下来准备数据库服务
生成数据库schema
meta-egg db -e _manifest/env-local.yml # 由于还没有真正创建数据库,所以这个命令会提示一个ERR表示数据库不存在, # 可以忽略此报错,我们需要的schema.sql已经被生成出来了, # 在_manifest/sql/下可以找到。
在数据库中使用上一步生成的
schema.sql
创建数据库# ps. 推荐使用GUI工具接入数据库,在GUI工具中执行schema.sql去创建。 # 因为有些docker起的mysql,登入容器用cli来导入sql,会由于容器环境缺少中文支持,导致创建的数据库表comment和字段comment未能正确写入。
将数据库地址、账号密码及数据库表名,填入
_manifest/env-local.yml
和configs/conf-local.yml
的相应配置项内由于demo数据库表
gener
是元数据库表,我们应该在数据库里手工添加元数据INSERT INTO `gender` (`deleted_at`,`desc`,`id`,`sematic`) VALUES (NULL, '男性', '1', 'MALE'), (NULL, '女性', '2', 'FEMALE');
再次执行
db
命令,检验数据库结构是否对齐,以及生成元数据初始化sqlmeta-data.sql
meta-egg db -e _manifest/env-local.yml # 这里应该不会再有报错,结果应该如下所示 database exists, will generate inc.sql generate db sql success copy schema.sql and meta-data.sql to <proj_root>/sql/ schema.sql [✓] meta-data.sql [✓] # 其中inc.sql里,应该不存在操作数据库变更的sql
执行
update
命令,根据前面创建的元数据生成代码,增加对元数据的常量定义meta-egg update -e _manifest/env-local.yml # 结果应该会更新gender的model和repo,如下: replaced files in gen/model gender.go [✓] replaced files in gen/repo gender.go [✓]
编译和运行工程
make build; make run # 应该看到服务被正常启动
Last updated