iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > GO >如何反思性地调用 Go 结构体的方法?
  • 734
分享到

如何反思性地调用 Go 结构体的方法?

2024-04-04 23:04:01 734人浏览 薄情痞子
摘要

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是golang学习者,那么本文《如何反思性地调用 Go 结构体的方法?》就很适合你!本篇内容主要包括##conten

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是golang学习者,那么本文《如何反思性地调用 Go 结构体的方法?》就很适合你!本篇内容主要包括##content_title##,希望对大家的知识积累有所帮助,助力实战开发

问题内容

假设我有一个 problemsolver 结构,其中包含 1,000 多个“解决问题”方法:

type problemsolver struct {}

func (ps problemsolver) problem1() {
    fmt.println("solving problem #1 ...")
    return
}

func (ps problemsolver) problem2() {
    fmt.println("solving problem #2 ...")
    return
}

...
    
func (ps problemsolver) problem1001() {
    fmt.println("solving problem #1001 ...")
    return
}

并说我想解决特定问题 - 例如问题#1、3、4、8、9、10、11、14、19、20 ...等。

func main() {
    ps := problemsolver{}
    problems := [100]int{1, 3, 4, 8, 9, 10, 11, 14, 19, 20 ...}
}

我知道你可以直接调用这些“一流函数”,但这有一种代码味道:

ps.problem1()
ps.problem3()
ps.problem4()
...
ps.problem1001()

我正在考虑使用 reflect 来代替 - 我尝试阅读 https://blog.golang.org/laws-of-reflection,但我发现它很难阅读。

是否可以使用 reflect 仅调用我想要的函数(与上面的 problems 变量一样)?

编辑:我使用下面的 burak 解决方案想出了这样的方法,效果很好。谢谢!

// Solve : Solves specified problems.
func (ps ProblemSolver) Solve() {
    val := reflect.ValueOf(ps)

    specifiedProblems := []int{1, 3, 4}

    for _, sp := range specifiedProblems{
        methodName := fmt.Sprintf("Problem%d", sp)
        val.MethodByName(methodName).Call(nil)
    }
}


解决方案


您可以直接调用这些函数:

ps.problem1()
ps.problem3()
ps.problem4()
...

您可以将它们放入数组中并调用它们:

problems:[]func(){ps.problem1,ps.problem3,ps.problem4,...}
for _,x:=range problems {
   x()
}

或者您可以使用反射

val:=reflect.ValueOf(ps)
val.MethodByName(fmt.Sprintf("Problem%d",num)).Call(nil)

这些方法未导出,为了使反射正常工作,您必须导出它们。

今天关于《如何反思性地调用 Go 结构体的方法?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在编程网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

您可能感兴趣的文档:

--结束END--

本文标题: 如何反思性地调用 Go 结构体的方法?

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何反思性地调用 Go 结构体的方法?
    在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《如何反思性地调用 Go 结构体的方法?》就很适合你!本篇内容主要包括##conten...
    99+
    2024-04-04
  • Golang中如何动态调用结构体的所有方法?
    哈喽!今天心血来潮给大家带来了《Golang中如何动态调用结构体的所有方法?》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万...
    99+
    2024-04-05
  • go语言中结构体方法如何定义
    本篇内容主要讲解“go语言中结构体方法如何定义”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go语言中结构体方法如何定义”吧!go语言中结构体方法的定义方法:1、定义一个结构体,语法“type ...
    99+
    2023-07-05
  • C#调用带结构体指针Dll的方法
    在C#中调用C(C++)类的DLL的时候,有时候C的接口函数包含很多参数,而且有的时候这些参数有可能是个结构体,而且有可能是结构体指针,那么在C#到底该如何安全的调用这样的DLL接口...
    99+
    2024-04-02
  • Go语言的结构体如何使用
    这篇文章主要介绍“Go语言的结构体如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go语言的结构体如何使用”文章能帮助大家解决问题。定义结构体,是一种自定义的数据类型,由多个数据类型组合而成。...
    99+
    2023-07-05
  • golang 如何用反射reflect操作结构体
    背景 需要遍历结构体的所有field 对于exported的field, 动态set这个field的value 对于unexported的field, 通过强行取址的方法来获取该值(...
    99+
    2024-04-02
  • go结构体赋值的方法是什么
    在Go语言中,可以使用以下两种方法给结构体赋值: 使用.(点号)操作符赋值:可以直接通过结构体变量名和成员变量名来赋值。例如: ...
    99+
    2024-02-29
    go
  • Go语言中结构体如何使用
    本篇文章为大家展示了Go语言中结构体如何使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。结构体Go语言中的基本数据类型可以表示一些事物的基本属性,但是当我们想表达...
    99+
    2024-04-02
  • Go语言中如何使用结构体
    这篇文章将为大家详细讲解有关Go语言中如何使用结构体,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。结构体结构体是 go 语言中一个比较重要的概念,在 c  语言中也有类似的东西。由...
    99+
    2023-06-15
  • 在Go中如何使用反射(reflection)设置结构体中的接口值
    学习Golang要努力,但是不要急!今天的这篇文章《在Go中如何使用反射(reflection)设置结构体中的接口值》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关...
    99+
    2024-04-04
  • go语言结构体指针操作的方法
    本篇内容介绍了“go语言结构体指针操作的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!指针指针是代表某个内存地址的值。内存地址储存另一个...
    99+
    2023-06-30
  • Go语言如何判断结构体是否存在某方法
    这篇文章主要介绍了Go语言如何判断结构体是否存在某方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言如何判断结构体是否存在某方法文章都会有所收获,下面我们一起来看看吧。go 有时需要判断某个结构体是不是...
    99+
    2023-07-05
  • Golang如何编写内存高效及CPU调优的Go结构体
    目录前言输出结果输出结果前言 结构体是包含多个字段的集合类型,用于将数据组合为记录。这样可以将与同一实体相关联的数据利落地封装到一个轻量的类型定义中,然后通过对该结构体类型定义方法来...
    99+
    2024-04-02
  • Golang 利用反射对结构体优雅排序的操作方法
    最近开始实习,工作技术栈主要Python和Golang,目前的任务把Python模块重构为GO模块,然后出现了一个问题,就是要将一个结构体按结构体中各个字段进行排序,然后写入Redi...
    99+
    2024-04-02
  • Go语言中如何使用结构体构造函数
    这篇文章将为大家详细讲解有关Go语言中如何使用结构体构造函数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Go语言的结构体 构造函数下面的代码就实现了一个P...
    99+
    2024-04-02
  • C语言结构体的具体使用方法
    目录初识C语言结构体1.为什么要有结构体2.结构体的定义2.1结构体类型的定义2.2定义结构体普通变量及访问2.3定义结构体指针变量及访问初识C语言结构体 1.为什么要有结构体 (1...
    99+
    2024-04-02
  • C 语言结构体的使用方法
    目录C 语言结构体使用1. 结构体的声明和定义1.1 介绍1.2定义的几种类型2. 结构体初始化3. 结构体成员访问4. 结构体传参C 语言结构体使用 1. 结构体的声明和定义 1....
    99+
    2024-04-02
  • 深入探究Go语言结构体方法的定义
    深入理解Go语言结构体定义的方法,需要具体代码示例 引言 Go语言是一门简洁高效的编程语言,在其核心特性中,结构体是一个非常重要的概念。与其他编程语言不同,Go语言的结构体不仅可以包含属性字段,还可以定义与结...
    99+
    2024-02-02
    方法 go语言 结构体定义
  • Go语言函数、结构体、方法和接口怎么用
    本篇内容介绍了“Go语言函数、结构体、方法和接口怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 函数Go语言的函数属于“一等公民”...
    99+
    2023-06-30
  • Go语言学习之结构体和方法使用详解
    目录1. 结构体别名定义2. 工厂模式3. Tag 原信息4. 匿名字段5. 方法1. 结构体别名定义 变量别名定义 package main import "fmt" type...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作