首页  >  文章  >  后端开发  >  如何动态迭代 Go 包中的方法?

如何动态迭代 Go 包中的方法?

Patricia Arquette
Patricia Arquette原创
2024-11-16 16:51:03486浏览

How can I dynamically iterate through methods in a Go package?

在 Go 中动态迭代包

问题:

作为 Go 的初学者,您正在构建一个计算器目前支持加法和减法。您设想未来的功能,例如乘法和除法。但是,您发现addition.go 和subtraction.go 文件中的当前方法过于冗长,因此需要寻求更动态的解决方案。有没有办法找到计算器包中的所有方法并动态迭代它们?

答案:

不幸的是,Go 没有提供内置机制来内省包的内容并动态地迭代它们的方法。编译器仅包含可执行文件中显式引用的函数和变量。在 Go 中,迭代可能不完整的符号集被认为没有用。

替代解决方案:

作为动态迭代的替代方案,您可以使用数组来保存您想要操作并迭代该数组的类型的对象。此方法涉及创建接口切片:

type Calc interface {
    First(x int) int
    Second(x int) int
}

var operations []Calc

然后,您可以将具体类型的对象附加到切片:

operations = append(operations, &calculator.Add{})
operations = append(operations, &calculator.Sub{})

然后您可以迭代该切片并调用动态方法:

for _, operation := range operations {
    fmt.Println(operation.First(x))
    fmt.Println(operation.Second(x))
}

这种方法提供了一种灵活的方法来迭代包中的计算器操作,而不需要动态内省。

以上是如何动态迭代 Go 包中的方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn