我正在开发一个应用程序,旨在在Unix系统上执行各种检查。我曾经在Python中为另一个项目完成过此操作,但是由于无法将其安装在需要执行检查的服务器上,因此无法使用该语言。我之所以选择Go,是因为它易于静态编译,并且无需安装任何东西即可支持多种平台。
无论如何,我想拥有一个文件夹来存放定义为模块的每个支票,在python
中看起来像这样:
CheckFolder = "checks"
sys.path.append(CheckFolder)
def getChecks():
checks = []
possibleChecks = os.listdir(CheckFolder)
for check in possibleChecks:
if (
check.endswith('.py') and
check != '__init__.py'
):
checks.append(check[:-3])
return checks
def loadCheck(check):
return importlib.import_module(check)
要运行检查,我循环:
for check in getChecks():
loaded_check = loadCheck(check)
loaded_check.run()
我不知道这在go
中是否可行,因为这是一种编译语言。我想在编译时加载checks
文件夹中的每个模块,并运行它们的run
函数,而无需分别指定和导入每个模块。
这是我到目前为止所尝试的:
src/checks/checks.go
:
func GetCheckers() []string {
var filenames []string
files, err := ioutil.ReadDir("src/checks/checkers")
if err != nil {
fmt.Print(err)
}
for _, file := range files {
filenames = append(filenames, file.Name()[0:len(file.Name())-3])
}
return filenames
}
main_check.go
package main
import (
"fmt"
"checks"
)
func main() {
checkers := checks.GetCheckers()
for _, check := range checkers {
fmt.Print(check)
check.run() // This does not work as checks are strings and not func
}
}
go
编程方面我是一个菜鸟:/非常感谢您的帮助和建议。