通过指定路径从函数内部获取 Go 文件

Get a Go file from inside a function by the specified path

大家好 ) 我正在尝试 运行 指定数据库的代码。 该项目包含一个包“客户端”,其中包含每个客户端(数据库名称)的子包。每个 sub_package 都有带函数 运行() 的“run.go”文件,我想使用它

-项目:

-- 客户:

---client_1

   ---run.go

---client_2

   ---run.go

---client_3

   ---run.go

--main.go

主文件如下所示:

package main 
 
import ( 
       "flag" 
       "fmt" 
       "os"
   ) 
 
 
func main() { 
   var impl string  
   flag.StringVar(&datbase_name, "database_name", "", "implementation database")

   file_path = fmt.SprintF("./clients/%s", datbase_name)

   file, err := os.Open(file_path)
   if err != nil{                          
        fmt.Println("Unable to open file:", err) 
        os.Exit(1)                         
    }
    defer file.Close()  

    file.Run()

但它不起作用,我明白为什么(我们只能读取文件,但不能使用它)

在Python中,我们可以使用内部导入(在函数内部),但在Go中不能

所以我不知道如何传递它(

Go 本身不允许您 运行 在 Go 中编写 Go 代码。虽然您可以使用 interpreter,但我建议只将函数加载到映射中并从那里调用它们。

func main() {
   var clients = map[string]func () {
      "client1": client1.Run,
      "client2": client2.Run,
   }

   var database_name string  
   flag.StringVar(&database_name, "database_name", "", "implementation database")

   clients[database_name]()
}

您必须调整 func 参数和 returns 客户端函数。