问题:
作为 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中文网其他相关文章!