首页 > 其他分享 >go:快速添加接口方法及其实现

go:快速添加接口方法及其实现

时间:2022-11-07 16:57:14浏览次数:64  
标签:实现 接口 添加 模块 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,方法
From: https://www.cnblogs.com/simfg/p/16866503.html

相关文章

  • linux安装mongodb 并且远程连接
    一、引言​​MongoDB​​是一个由C++语言编写的基于分布式文件存储的数据库,MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关......
  • 使用 github.com/wcharczuk/go-chart 绘图
    公共绘图函数packagechartsimport( "bytes" "log" "os" chart"github.com/wcharczuk/go-chart/v2" drawing"github.com/wcharczuk/go-chart/v2/drawing" "......
  • mongodb基本操作合集
    创建管理员账号useadmindb.createUser({user:"root",pwd:"xxxxxx",roles:[{role:"root",db:"admin"}]})其他库创建账号......
  • Window环境下,安装MongoDB
    一、下载MongoDB官网下载地址:https://www.mongodb.com/try/download/community,选择MongoDB版本,平台为Windows,本文选择的安装包格式为msi:二、安装下载完成后,双击下载的m......
  • CSRF和token以及用django实现
    csrfCSRF(Cross-SiteRequestForgery,跨站点伪造请求)是一种网络攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在未授权的情况下执......
  • 请求接口报错blocked:other
    问题描述:请求后端接口的时候一直报错:Status(blocked:other)原因:可能是浏览器安装了某些广告拦截的插件导致的,你的接口刚好触发了它的拦截规则,比如ad...开头等等。解......
  • Google翻译 失效 idea TKK 问题
    参考:https://bookfere.com/post/1020.html原因:谷歌翻译退出中国,可以更改host文件来实现正常使用直接使用版本142.250.0.90translate.googleapis.com142.250.0.90tr......
  • ping添加时间戳
    以下内容直接复制到txt文档,将.txt后缀改成.vbs将vbs文件放到C盘根目录,直接双机打开,运行后C盘根目录下会有以ping的目的地址为文件名的txt文档 Setshell=WScript.Cr......
  • 13-jmeter-登录接口进行压力测试(终极性能场景设计)
    一、添加插件jp@gc-UltimateThreadGroup->安装插件请看-->10-jmeter-初识负载测试的概念:逐步加压(阶梯式线程组)1、界面介绍  二、示例1、压力测试场景->用30秒启......
  • django-environ学习
    官方说明:https://django-environ.readthedocs.io/en/latest/index.htmlinstallpipinstalldjango-environquickstartimportenvironimportosenv=environ.Env(......