gpt4 book ai didi

go - 如何动态迭代包?

转载 作者:IT王子 更新时间:2023-10-29 01:33:48 27 4
gpt4 key购买 nike

这是我使用 Go 的第一周,所以请原谅我的无知 ;)。我从 Python 平静下来。我目前正在构建一个带有加法和减法的简单计算器。

我的 addition.go 文件如下所示:

package calculator

type 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 和 future 的功能,如 multiplication.go division.go 看起来很相似。要运行这些,我有:

package main

import (
"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 文档,但似乎没有办法获得它。它们的运行顺序无关紧要......例如减法可以在加法之前运行。

最佳答案

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

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

关于go - 如何动态迭代包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26444466/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com