返回顶部
首页 > 资讯 > 后端开发 > GO >Go动态调用函数的实例教程
  • 785
分享到

Go动态调用函数的实例教程

Go动态调用函数Go动态调用 2023-01-03 12:01:04 785人浏览 八月长安
摘要

目录前言javascript 动态调用函数Go 中动态调用方法前言 经常在开发的时候会遇到这样的场景,几个模块的都有相同的方法,但会因为不同的类型的需要调用不同模块的方法。使用一个

前言

经常在开发的时候会遇到这样的场景,几个模块的都有相同的方法,但会因为不同的类型的需要调用不同模块的方法。使用一个 switch 可以很方便的解决问题。但是当你遇到的场景是几个模块的方法都是需要的执行,同时它需要在不同的配置下执行相对应的方法。

func m1(){}
func m2(){}
func m3(){}

c := cron.New(cron.WithSeconds())
c.addFunc(config1,func(){
    m1()   
})
c.addFunc(config2,func(){
    m2()   
})
c.addFunc(config3,func(){
    m3()  
})

以上使用简单的伪代码说明了下,在执行定时任务时不同的定时时间执行不同的定时任务,但当存在很多个定时任务的时候,就会写很多的重复的代码,只是核心的调用具体的方法不一样。在阅读上也会让人觉得头疼。

JavaScript 动态调用函数

遇到以上的场景时,可以想到的是使用动态调用函数的方式。但是在 Go 中可能还不像之前使用 JavaScript开发时动态调用函数那么简单。在 JavaScript 中可以使用 eval 来实现。eval 函数可以执行参数字符串,即将字符串作为函数名然后就可以直接调用函数。

function m1(){}
function m2(){}
function m3(){}
funMap ={
config1:'m1'
config2:'m2'
config3:'m3'
}

funMap.foreach((val)=>{
   evl(val+"()")    
})

当然 JavaScript 还有很多方式可以支持动态调用函数。但是今天主要介绍的是 Go 中的动态调用函数。

Go 中动态调用方法

Go 中想要动态调用函数,需要通过反射的方式来实现。而且其应该是对某个类型进行反射,然后获取到其相关的属性。

type my struct{}
func (m *my)m1(){}

//----main---
mname="m1"
funcs := reflect.ValueOf(&my{})
f := funcs.MethodByName(mname)
f.call()

从以上代码的实现就可以容易入手学会使用动态调用。其原理应该就是对某类型的反射,然后通过字符串的函数名获取到对应的函数,最后直接使用 call 方法就可以正常调用该方法。

当函数是一个带有参数的方法的时候,那么我们动态调用的时候还需要传递函数参数。只需要将参数放入call函数中就可以正常传递参数。

params := make([]reflect.value,len(args))
 for i, _ := range args {
        params[i] = reflect.ValueOf(args[i])
  }

mname="m1"
funcs := reflect.ValueOf(&my{})
f := funcs.MethodByName(mname)
f.call(params)

以上就是实现带参数的动态调用函数。轻松学会动态调用。不仅可以优化代码,后续就不用太繁琐的写一大堆重复的代码,这样后续只需增加方法名对应的集合。然后循环执行就可以了。

mapMd :=map[string]string{
    "key1":"m1"
    "key2":"m2"
}

funcs := reflect.ValueOf(&my{})
for key, val := range mapMd {
    f := funcs.MethodByName(key)
	f.Call()
}

需要注意的是,这个是针对动态调用方法,因为其绑定到对应的结构体了,所以能够通过映射方式获取到对应结构体的属性和方法。

到此这篇关于Go动态调用函数的实例教程的文章就介绍到这了,更多相关Go动态调用函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Go动态调用函数的实例教程

本文链接: https://lsjlt.com/news/176457.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Go动态调用函数的实例教程
    目录前言JavaScript 动态调用函数Go 中动态调用方法前言 经常在开发的时候会遇到这样的场景,几个模块的都有相同的方法,但会因为不同的类型的需要调用不同模块的方法。使用一个 ...
    99+
    2023-01-03
    Go动态调用函数 Go动态调用
  • Go语言函数的延迟调用实例分析
    今天小编给大家分享一下Go语言函数的延迟调用实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。基本功能在以下这段代码中,...
    99+
    2023-07-02
  • android动态壁纸调用的简单实例
    调用后动态壁纸其实是显示在Activity的后面,而Activity则是透明显示,这样就可以看到下面的动态壁纸,如果Activity不是透明的则什么也看不到。 代码中有用到两个...
    99+
    2022-06-06
    调用 Android
  • MySQL中sum函数使用的实例教程
    文章简介 今天分享一下MySQL中的sum函数使用。该函数已经成为大家操作MySQL数据库中时常用到的一个函数,这个函数统计满足条件行中指定列的和,想必肯定大家都知道了,本身就没什么讲头了,这篇文章主要是通过几个小...
    99+
    2022-05-13
    mysql sum函数求和 sql sum函数求和 mysql sum函数函数
  • Oracle的常用字符函数实例教程
    这篇文章主要介绍“Oracle的常用字符函数实例教程”,在日常操作中,相信很多人在Oracle的常用字符函数实例教程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle...
    99+
    2024-04-02
  • C++调用matlab函数的实例
    目录一、封装matlab函数二、 编译matlab函数三 、C++环境配置四、mwArray数组的运用一、封装matlab函数 首先把matlab代码封装成函数形式,下面举一个例子,...
    99+
    2024-04-02
  • C#调用C++动态库接口函数和回调函数方法
    目录1. 前言2. 普通接口函数调用示例2.1 C++端编写接口2.2 C#端调用3. 回调函数调用示例3.1 C++端编写接口3.2 C#端调用1. 前言 需求: 当前C已经写好了...
    99+
    2024-04-02
  • C#怎么调用C++动态库接口函数和回调函数
    本文小编为大家详细介绍“C#怎么调用C++动态库接口函数和回调函数”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#怎么调用C++动态库接口函数和回调函数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 前言...
    99+
    2023-06-29
  • PHP 函数的动态调用技巧是什么?
    php 动态调用函数是一种强大的特性,允许您根据变量值或输入动态调用函数。您可以使用 call_user_func() 函数,其中第一个参数是函数名称,后面是函数参数。动态调用函数可提高...
    99+
    2024-04-11
    函数 php
  • Vue高级用法实例教程之动态组件
    目录基础描述AST解析render函数普通组件和动态组件的对比工厂函数形式的动态组件总结动态组件我相信大部分在开发的过程中都会用到,当我们需要在不同的组件之间进行状态切换时,动态组件...
    99+
    2024-04-02
  • 如何在 PHP OOP 中动态调用函数
    在 php oop 中,动态调用方法可通过两个函数实现:call_user_func:将方法名和参数逐个传递,获取要调用的方法名和参数数组,再调用此函数。call_user_func_a...
    99+
    2024-04-10
    oop 动态调用
  • 在动态库中调用外部函数的方法
    本篇内容介绍了“在动态库中调用外部函数的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!愉快的玩耍比如:...
    99+
    2024-04-02
  • Go 中调用的函数如何访问调用函数的参数?
    Go 中调用的函数可以通过函数参数来获取调用函数的参数。在 Go 中,参数可以通过传值或传引用的方式传递给函数,函数可以通过参数来获取调用者传递的值或指针。如果参数是值类型,函数内部的...
    99+
    2024-02-09
  • C#实现动态创建接口并调用的实例
    本文简单介绍如何动态创建接口interface的实现实例对象,包含两个知识点: 1.如何获取接口interface的所有实现实例对象? 2.如何判断实例对象的构造函...
    99+
    2024-04-02
  • 学习Go语言文档中的reflect.MakeFunc函数实现动态函数生成
    学习Go语言文档中的reflect.MakeFunc函数实现动态函数生成在Go语言中,reflect包提供了一系列的函数和类型,用于在运行时进行类型信息的解析和操作。其中,reflect.MakeFunc函数是一个非常强大的函数,可以用来在...
    99+
    2023-11-03
    Go语言 reflect MakeFunc
  • Kotlin函数使用示例教程
    目录我们先看看简单的函数我们写一个求和函数函数头函数体调用函数非常简单反编译Java源代码步骤接下来我们来看看匿名函数这是接口的声明我们先看看简单的函数 // 前面的文章我们了解到它...
    99+
    2024-04-02
  • c++动态库调用的实现
    目录一、生成dll二、调用dll在平时的开发中某些情况,动态库和静态库是程序开发的不二法门,例如封装一个库,供别人调用(日志库、字符串处理库、设备信息采集库等),比如接入第三方系统或...
    99+
    2024-04-02
  • Golang如何调用windows下的dll动态库中的函数
    使用syscall调用 package main import ( "fmt" "syscall" "time" "unsafe" ) const...
    99+
    2024-04-02
  • go语言调用其他包中的函数简单示例
    目录需求步骤附:Go语言同一个包中不同文件之间函数调用总结需求 我们想在程序的入口main.go中调用service包下的user_service.go中的函数,该如何调用呢?示例...
    99+
    2023-01-13
    go 函数调用 go语言调用函数
  • Go基础教程系列之回调函数和闭包详解
    Go回调函数和闭包 当函数具备以下两种特性的时候,就可以称之为高阶函数(high order functions): 函数可以作为另一个函数的参数(典型用法是回调函数)函数可以返回另...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作