为了账号安全,请及时绑定邮箱和手机立即绑定

如何动态迭代一个包?

如何动态迭代一个包?

Go
浮云间 2021-08-23 16:48:22
这是我使用 Go 的第一周,所以请原谅我的无知;)。我从 Python 平静下来。我目前正在使用加法和减法构建一个简单的计算器。我的addition.go文件看起来像这样:package calculatortype Add struct{}func (h Add) First(x int) int {    x += 5    return x}func (h Add) Second(x int) int {    x += 10    return x}我的布局subtraction.go文件看起来非常相似,addition.go和未来的功能,如multiplication.go与division.go将类似于。要运行这些,我有:package mainimport (    "fmt"    "github.com/mytester/calculator")type Calc interface {    First(x int) int    Second(x int) int}func main() {    x := 10    var i Calc    a := &calculator.Add{}    i = a    i.First(x)    fmt.Println(x)    fmt.Println(i.First(x))    fmt.Println(i.Second(x))    fmt.Println("Next method...")    b := &calculator.Sub{}    i = b    fmt.Println(x)    fmt.Println(i.First(x))    fmt.Println(i.Second(x))    // iterate through the rest of my calculator methods}这看起来很冗长,尤其是当我添加越来越多的功能(如乘法等)时。有没有办法找到我的计算器的所有方法,然后遍历所有方法?我已经查看了reflect文档,但似乎没有办法得到这个。它们运行的顺序无关紧要......例如,减法可以在加法之前运行。
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

Go 没有提供你想要的功能。没有内省包内容的机制。这样做的原因是编译器只保留在某处引用的可执行文件中的函数和变量。如果你从来没有明确使用过一个函数,它就不会出现在可执行文件中。迭代可能不完整的符号集是没有意义的,因此没有实现。

您可以创建一个包含您要操作的类型的对象的数组,如果这解决了您的问题,则对其进行迭代。


查看完整回答
反对 回复 2021-08-23
  • 1 回答
  • 0 关注
  • 181 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信