#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.