一、背景
首先简要介绍写反射技术(reflect)。
反射技术(reflect)是一种能够在程序运行时动态访问、修改某个类中任意属性(状态)和方法(行为)的机制。它可以完成以下几个功能:在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法
七镜在开发语言的深度理解上其实并没有多深入,知道写技术框架的那些大神,经常会使用反射技术(reflect)来复用一些逻辑代码,实现高度的可复用性。
对反射技术理解的不深入的前提下,有没有其他办法来来编写框架呢?有的,有个简单好理解的路子:代码生成代码
二、以七镜的博客平台服务端里常见的增删改查为例,代码生成代码的步骤如下:
- 正常实现业务逻辑:包含实体结构体名、数据库访问代码、graphql schema定义、graphql endpoint定义等等。
- 从大量的重复代码中,找到复用点:结构体名。通常一个实体A的结构体名,对应一串A的增删改查代码,将实体A的增删改查代码里的结构体名A修改成另一个结构体名B之后,就变成了实体B对应的一串增删改查代码了。
- 编写生成代码的代码。根据第2步里的复用点,将实体A的代码文件(比如user.go)读取成字符串,将字符串里的结构体名A,替换成结构体名B,保存到实体B的代码文件(比如comment.go)中即可。