go:快速添加接口方法及其实现
问题描述
在大型项目中,通常存在多个模块,模块对外暴露的功能通常是通过接口封装,这样可以明确模块的功能,有效降低模块与模块之间的耦合度,同时模块与模块之间进行合理的组装。接口的实现,有时可能存在多个实现,如接口每个实现对应一种策略、或者测试代码中因为测试场景添加了测试实现等,这时候如果想给接口添加一个方法,自然需要给所有的实现都添加这个方法。但是当你给接口添加了一个方法后,这时候之前接口的实现就无法通过idea找到了。或许,先给所有的实现添加方法,最后在给接口添加。
灵感
文章:http://oopsguy.com/2017/10/27/the-ultimate-guide-to-writing-a-go-tool/
项目:https://github.com/fatih/gomodifytags
这个主要是功能是,获取一个go文件中sruct的定义,然后给其每个字段添加tag,核心使用了go中的ast去解析go文件,生成相应代码。
解决方案
实现的预期效果,给指定接口的方法,然后给齐所有的实现也添加上这个方法的默认实现。
思路
- 扫描项目中所有的struct和interface
- 判断所有的struct与interface组合是否存在实现关系
- 通过ast给interface与struct添加方法
效果
源码
https://github.com/SimFG/interfacer
PS:目前的实现是最初版,只是可以满足基本的情况,对于代码中的一些特殊结构欠缺考虑,如果使用过程中发现问题,欢迎github上反馈
go:快速添加接口方法及其实现的更多相关文章
- 在Eclipse中快速添加main方法
方法一: 在创建类时自动添加,勾选“public static void main(String[] args)” 方法二: 输入main之后按"alt+/"组合键,选择如图所 ...
- 如何在Eclipse中快速添加main方法
在创建类时自动添加,只需要勾选"public static void main(String[] args)"
- MYSQL数据库快速添加测试数据方法
先添加两条数据,这里最好添加两条不一样的数据 INSERT INTO "表名"(**, **) VALUES (**,**),(**,**) 然后再次添加数据,这次把查询到的数据添 ...
- IDEA 创建类是自动添加注释和创建方法时快速添加注释
1.创建类是自动添加注释 /*** @Author: chiyl* @DateTime: ${DATE} ${TIME}* @Description: TODO*/2. 创建方法时快速添加注释2.1 ...
- iOS警告收录及科学快速的消除方法
来自: http://www.cnblogs.com/dsxniubility/p/4757760.html iOS警告收录及科学快速的消除方法 前言:现在你维护的项目有多少警告?看着几百条警 ...
- Android JNI 学习(四):接口方法表 & Base Api & Exception Api
本文我们来总结一下JNI 提供的功能列表及相关的函数表. 注意:请注意使用术语“必须”来描述对JNI程序员的限制.例如,当您看到某个JNI函数必须接收非NULL对象时,您有责任确保不将NULL传递给该 ...
- 【转】在Visual Studio中怎样快速添加代码段
原文网址:http://blog.csdn.net/yl2isoft/article/details/9735527 以前一直只知道,键入prop,再按两次tab键,会生成自动属性代码. 今天闲着无事 ...
- Spring Cloud实战: 基于Spring Cloud Gateway + vue-element-admin 实现的RBAC权限管理系统,实现网关对RESTful接口方法权限和自定义Vue指令对按钮权限的细粒度控制
一. 前言 信我的哈,明天过年. 这应该是农历年前的关于开源项目 的最后一篇文章了. 有来商城 是基于 Spring Cloud OAuth2 + Spring Cloud Gateway + JWT ...
- 【无私分享:ASP.NET CORE 项目实战(第二章)】添加EF上下文对象,添加接口、实现类以及无处不在的依赖注入(DI)
目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 上一章,我们介绍了安装和新建控制器.视图,这一章我们来创建个数据模型,并且添加接口和实现类. 添加EF上下文对象 按照我们以前 ...
随机推荐
- 刷题记录:Codeforces Round #734 (Div. 3)
Codeforces Round #734 (Div. 3) 20210920.网址:https://codeforces.com/contest/1551. 编程细节:下标定义不要一会[1,n]一会 ...
- React报错之You provided a `checked` prop to a form field
正文从这开始~ 总览 当我们在多选框上设置了checked 属性,却没有onChange 处理函数时,会产生"You provided a checked prop to a form fi ...
- rh358 001 Linux网络与systemd设置
358 rhel7 ce ansible 部署服务 dhcp nginx vanish haproxy 打印机服务 服务管理自动化 systemd与systemctl systemctl 来管理sys ...
- C++一些新的特性的理解(二)
1 C++11多线程thread 重点: join和detach的使用场景 thread构造函数参数 绑定c函数 绑定类函数 线程封装基础类 互斥锁mutex condition notify.wai ...
- 「题解报告」P3354
P3354 题解 题目传送门 一道很恶心的树形dp 但是我喜欢 题目大意: 一片海旁边有一条树状的河,入海口有一个大伐木场,每条河的分叉处都有村庄.建了伐木场的村庄可以直接处理木料,否则要往下游的伐木 ...
- SpringMvc请求流程源码解析
目录 SpringMvc请求流程图 请求流程粗讲解 方法细讲 doDispatcher --> 核心 找到Handler#getHandler getHandler(request) mappi ...
- grub2配置文件丢失如何修复
实验操作准备 此步骤因实验需要所做,系统开机属grub界面无需此步! lsblk命令为了查看根分区挂载在什么位置 rm -rf /boot/grub2/grub.cfg命令为删除grub2配置文件到达 ...
- 理解 Spring IoC 容器
控制反转与大家熟知的依赖注入同理, 这是通过依赖注入对象的过程. 创建 Bean 后, 依赖的对象由控制反转容器通过构造参数 工厂方法参数或者属性注入. 创建过程相对于普通创建对象的过程是反向, 称之 ...
- ProxySQL(12):禁止多路路由
文章转载自:https://www.cnblogs.com/f-ck-need-u/p/9372447.html multiplexing multiplexing,作用是将语句分多路路由.开启了mu ...
- MinIO客户端快速入门指南
官方文档地址:http://docs.minio.org.cn/docs/master/minio-client-quickstart-guide MinIO Client (mc)为ls,cat,c ...