Получение файла Go из функции по указанному пути

#go #import #package

#Вперед #импорт #пакет

Вопрос:

Привет всем) Я пытаюсь запустить код для указанной базы данных. Проект содержит пакет «Клиенты» с подпакетами для каждого клиента (имя базы данных). В каждом подпакете есть файл «run.go» с функцией Run (), которую я хочу использовать

-Прогнозировать:

— Клиенты:

 ---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(amp;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

Поэтому у меня нет идей, как передать его (

Комментарии:

1. Go не поддерживает динамическую загрузку исходных файлов пакета. Исправлено статическим импортом пакетов в main. Смотрите Как писать код Go для руководства по использованию пакетов для написания программы Go.

Ответ №1:

Go изначально не позволяет запускать код Go в Go. Хотя вы могли бы использовать интерпретатор, я бы рекомендовал просто загружать функции в map и вызывать их оттуда.

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

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

   clients[database_name]()
}
 

Вам нужно будет настроить func параметры и возвраты клиентских функций.

Комментарии:

1. Ваше приветствие :). Я только что обновил его правильным синтаксисом, думаю, я забыл, как писать Go.