首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

golang实现动态调用不同struct中不同的方法

在我们的业务中,尤其涉及到后台业务,在我们不用考虑性能的情况下,我们写后台框架的时候,可能会遇到这样的一些情况,如何通过某些struct名和方法名传递进来执行不同的逻辑。...这个时候我想的是go的反射是最好的实现这种功能,当然在go里面也可以通过定义配置来实现进入动态进入不同的struct名和方法名,或者其他方式(如果你有更好的方式,可以互相交流)。...下面我们来讲一个例子 假如前端传递UserController和GetName,后端通过UserController和GetName调用struct为UserController的GetName的方法。...我想的是如果前端传PermissionController和GetPermission等其他不同的struct中不同的方法我都能动态的执行不同的方法,当然如果找不到对应的struct和不同的方法,那肯定是需要告诉前端你请求的方法不存在...,但是其中的某些坑还是很多,好了关于动态调用不同struct的不同的方法就到这里,有兴趣的可以找我交流。

1.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    聊聊不同集群的微服务如何通过feign调用

    feign客户端包给到服务A开发团队,服务A开发团队直接将客户端包引入到项目,在通过@EnableFeignClients来激活feign调用,现在跨了不同集群,而且2个集群间的注册中心也不一样,之前的调用方式就不大适用了...业务部门的技术负责人就找到我们部门,看我们有没有什么方案。当时我们提供的方案,一种是服务A团队自己开发客户端接口去调用服务B,但这个方案工作量比较大。另外一种方案,就是通过改造openfeign。...在业内一直很流行一句话,没有什么是加一层解决不了的 02 破局 后面我们提供的方案如下图 本质上就是原来服务A直接调用服务B,现在是服务A先通过和服务B同集群的网关,间接调用服务B。...: gateWayUrl: localhost:8000 再通过消费端调用服务提供者 可以正常访问,我们观察消费者控制台输出的信息 同时观察网关控制台输出的信息 我们可以发现,此次调用...,是通过网关路由到服务再产生调用,说明我们扩展的feign已经具备通过网关请求服务的能力 06 总结 可能有朋友会说,何必这么麻烦扩展,直接通过 @FeignClient(name = "${feign.instance.svc

    30720

    聊聊不同集群的微服务如何通过feign调用

    客户端包给到服务A开发团队,服务A开发团队直接将客户端包引入到项目,在通过@EnableFeignClients来激活feign调用,现在跨了不同集群,而且2个集群间的注册中心也不一样,之前的调用方式就不大适用了...业务部门的技术负责人就找到我们部门,看我们有没有什么方案。当时我们提供的方案,一种是服务A团队自己开发客户端接口去调用服务B,但这个方案工作量比较大。另外一种方案,就是通过改造openfeign。...在业内一直很流行一句话,没有什么是加一层解决不了的破局后面我们提供的方案如下图图片本质上就是原来服务A直接调用服务B,现在是服务A先通过和服务B同集群的网关,间接调用服务B。...default: # 开启feign记录请求和响应的标题、正文和元数据 loggerLevel: FULL通过消费端调用服务提供者图片可以正常访问,我们观察消费者控制台输出的信息图片我们可以发现...:8000再通过消费端调用服务提供者图片可以正常访问,我们观察消费者控制台输出的信息图片同时观察网关控制台输出的信息图片我们可以发现,此次调用,是通过网关路由到服务再产生调用,说明我们扩展的feign已经具备通过网关请求服务的能力总结可能有朋友会说

    35940

    HttpURLConnection调用get方法碰到奇怪的编码问题--不同的方式调用同一个方法竟然有不同的结果

    ,从单元测试调用这个方法是正常的,而从页面上通过ajaix调用这个方法还是找不到数据,注意:这里的关键字“浙江”已经写死在代码里了,也就是说不管传什么参数都是一样的。...它们之间的区别仅仅是调用的路径不同,一个是从单元测试调用的,一个是从页面上调用的。...页面调用 通过页面ajax调用接口: 参数也能正常传到Controller,问题是sendUrl我已经在方法里写死了,却得到了不一样的结果: /** * 获取公司列表...这是通过单元测试的方法发送的请求,编码没有问题: 这是通过页面发送的请求,编码就有问题了: 不同的方式调用同一个方法,为什么会有这样的区别呢?真是搞不明白。。。...但是单元测试的时候,为什么不编码也可以呢?而从页面上通过Controller调用就有编码问题? 这个疑问还没解开。。。 如果有大神知道原因,请不吝赐教,谢谢!

    1.5K10

    Python中通过对象不能调用类方法和静态方法的解析

    一、类方法和静态方法的定义在了解Python中通过对象不能调用类方法和静态方法之前,首先需要明确类方法和静态方法的定义。...类方法和静态方法都是定义在类中的一种方法,可以通过类名直接调用,而不需要先创建该类的实例。...二、对象调用方法的原理在Python中,对象调用方法的原理可以简单概括为:Python通过找到方法所在的类,并将该对象作为第一个参数(通常用self)传入方法中。...三、不能通过对象调用类方法和静态方法的原因既然Python中对象调用方法的原理是将该对象作为第一个参数传入方法中,那么为什么不能通过对象调用类方法和静态方法呢?...因此,如果在静态方法中尝试访问类或实例的属性或方法,就会出现错误。四、总结Python中的类方法和静态方法是很有用的方法,可以通过类名直接调用而不需要创建实例。

    98730

    Android 通过 JNI 调用 Java 类的构造方法和父类的方法

    Android 还可以通过 JNI 来调用 Java 一个类的构造方法,从而创建一个 Java 类。 调用构造方法 调用构造方法的步骤和之前调用类的实例方法步骤类似,也需要获得对应的类和方法 id。...然后通过 AllocObject 方法创建对象,但要注意的是,此时创建的对象是未被初始化的,不同于 NewObject 方法创建的对象直接就是初始化了,在一定程度上,可以说 AllocObject 方法是延迟初始化的...通过这种方法,同样可以创建一个 Java 中的类。 调用父类的方法 可以通过 JNI 来调用父类的实例方法。...在子类中通过调用 CallNonvirtualMethod 方法来调用父类的方法。...首先,构造一个相应的子类,然后获得父类的 类型和方法 id,以及准备对应的参数,根据父类方法的返回值选择调用不同的 CallNonvirtualMethod 函数。

    2.7K20

    Java 反射机制详解:私有方法调用头大?如何通过反射调用类中的私有方法?

    文章目录 前言 一、私有方法在本类中直接调用 1.1、在本类中实例化,调用私有方法 1.2、尝试在其他类直接调用私有方法(错误示范) 二、使用反射实例化类强制调用私有方法 2.1、使用类加载器加载被调用的类...一、私有方法在本类中直接调用 1.1、在本类中实例化,调用私有方法 说明:被 private 关键字修饰的构造方法、方法或者数据域只在其所在的类中可见。...(); } } 1.2、尝试在其他类直接调用私有方法(错误示范) 如果我们直接在其他的类中实例化 Demo 类,来直接调用 demo() 方法,就会发现 IDE 直接产生编译错误,很明显我们直接在另一个类中调用私有方法是行不通的...我们通过实例化Method类来调用Method类中的方法,常用方法有以下几个: getMethods():获得类的 public 类型的方法 getMethod(String name, Class[]...invoke()方法的返回值总是对象,如果实际被调用的方法的返回类型是基本类型数据,那么invoke()方法会把它转换为相应的包装类型的对象,再将其返回。

    2.4K21

    不同编程语言的程序可不可以通过接口相互调用?

    现在就以C语言C++之间的互相调用作为例子来讲述,由于各个语言都有自己的编译结构,很难直接全方面混合调用,一般采用中间蠕道的方式打通一个通道然后进行数据融合,C语言和C++数据互相调用主要通过一个extern...关键字通道来完成的,而且通过这种关键字还能完成互相调用的过程,因为本质上C语言属于面向过程的语言,C++是面向对象的操作,所以在内存结构摆列方式就不太一样,C语言融入到C++里面主要是通过设置C语言的函数成为全局变量的方式纳入到...so库,就是通过动态dlopen的方式动态把库加载进去,然后通过在java打通的底层蠕洞完成java调用底层语言的过程,因为这种蠕洞的存在直接能够提升编程的灵活性,几乎所有主流的编程语言之间都可以通过这种方式来完成真正意义上的互相调用...不同编程语言调用产生多少开销 前段时间吵得非常热的方舟编译器,在本质上讲和不同的编程语言之间的调用有一定关联,其实不同编程语言之间融合对于编译器的设计是一种极大的挑战,华为方舟编译器最大的挑战是把java...一般来讲不同编程语言之间互相调用在编译器里面如果设计不是很妥当很可能造成性能的损失,原则上在设计的时候尽量不要交叉调用,但在实际开发过程中也很难避免掉,方舟编译同时也对java直接调用C++的进行重点的优化

    1.8K20

    Hive的自定义函数与通过reflect调用java方法

    本篇博客小菌为大家带来的是关于Hive自定义函数的相关内容! 首先先让我们来看下系统自带的函数有哪些!...发现hive自带的函数就有近一百个,但我们平时经常用到的可能就那么几个,并且自带的函数功能还十分受限!有时候,为了更好的实现业务需求,可能就需要我们去自定义Hive!...第五步:创建临时函数(永久的函数将temporary删掉) ? 第六步:调用验证 ?...通过reflect调用java方法 经历完了上面自定义函数过后,相信大家一定还是觉得过程有点繁琐。不用担心,接下来小菌将为大家带来如何在Hive中调用java方法。...第三步:调用 select reflect (‘参数一’,‘参数二’,‘参数三’) 参数一: 包名-类名 参数二: 方法名 参数三:需要计算的数据 ?

    1.6K30

    Android NDK编程(五)--- CC++调用Java不同类中的静态方法

    前言 上一篇我们介绍了《Android NDK编程(四)--- C/C++调用Java中的方法》,主要是C/C++中调用Java的方法,这一篇我们针对上一篇的内容再延伸说一下,关于调不同类中的静态方法。...通过ALT+ENTER在native-lib.cpp中增加了对应的方法函数,然后写实现方法。 ? 最后再我们的按钮事件里调用VaccaeJNI类中的静态方法 ? 运行结果 ?...上面来说我们从java调C/C++的方法其实基本都差不多,下面我们重点要说一下C/C++调用java的方法。 我们在VaccaeJNI中加入一个native的静态方法和一个本地的静态方法。 ?...在按钮事件中我们再写实现方法 ? 相对来说调用静态方法还是比较简单的,我们看一下运行结果 ?...---- 调用不同类中的方法 最后我们要说一下重点,因为我们在写方法的时候可能会调用的是不同类里面的方法,导航native的方法和要调用的java方法不在同一个类里,遇到这样的方法我们来看一看怎么实现

    1.7K20

    不同程序集,名称空间类名和方法签名都一样的方法,如何调用

    有时候,你可能会遇到这样的问题,不同程序集,名称空间类名和方法签名都一样的方法,如何调用。本文将介绍如何通过别名的方式来解决这个问题。...创建两个不同的程序集 我们来创建两个不同的程序集,但是他们的名称空间一样: dotnet new classlib -o ClassLibrary1 -n ClassLibrary1 dotnet new...dotnet add ConsoleAppShi reference ClassLibrary2 然后,我们在控制台应用中调用这两个程序集中的 Where 方法: using Example; var...我们可以通过别名的方式来解决这个问题,首先修改项目文件,设置两个程序集的别名: <ProjectReference...总结 通过别名的方式,我们可以解决不同程序集,名称空间类名和方法签名都一样的方法,如何调用的问题。

    1.4K20

    不同程序集,名称空间类名和方法签名都一样的方法,如何调用

    有时候,你可能会遇到这样的问题,不同程序集,名称空间类名和方法签名都一样的方法,如何调用。本文将介绍如何通过别名的方式来解决这个问题。...创建两个不同的程序集 我们来创建两个不同的程序集,但是他们的名称空间一样: dotnet new classlib -o ClassLibrary1 -n ClassLibrary1 dotnet new...dotnet add ConsoleAppShi reference ClassLibrary2 然后,我们在控制台应用中调用这两个程序集中的 Where 方法: using Example; var...我们可以通过别名的方式来解决这个问题,首先修改项目文件,设置两个程序集的别名: <ProjectReference...总结 通过别名的方式,我们可以解决不同程序集,名称空间类名和方法签名都一样的方法,如何调用的问题。 参考 extern alias (C# Reference)^1

    19120

    springboot在后端通过网址调用其他后端的接口的两个方法

    通过restTemplate 直接调用 RestTemplate restTemplate = new RestTemplate(); String s = restTemplate.getForObject...id=” + id, String.class); 但是这种方法是写固定的IP地址,不能动态使用 通过restTmplate+ribbon 负载均衡 DiscoveryClient 通过拉去到本地...url自己实现负载均衡 LoadBalanceClient 默认是通过轮询的方式实现负载均衡 //1.通过restTemplate 直接调用 RestTemplate restTemplate...id=" + id, String.class); //2.通过restTmplate+ribbon 负载均衡 DiscoveryClient 通过拉去到本地url自己实现负载均衡 LoadBalanceClient...默认是通过轮询的方式实现负载均衡 注解的形式 // List serviceInstances = discoveryClient.getInstances("products

    1.8K20
    领券