@itmind
full-stack developer

Как добавить новое поле к существующей структуре (типу) и таблице БД из плагина?

Дана структура вида
type MyStruct struct {
    text string
    x int
}

Через ORM GORM эта структура хранится в таблице БД.
Где-то через ORM эти данные считываются из БД. Например:
func main(){
    var mystruct MyStruct
    DB.First(&mystruct)

    println(mystruct.text)
    println(mystruct.x)
}


Далее я хочу сделать "плагин" к приложению, который добавит к структуре новое поле 'y' и функцию, которая считает из БД это поле, т.е.:
func plugin(){
    var mystruct MyStruct
    DB.First(&mystruct)

    println(mystruct.text)
    println(mystruct.x)

    //Считываем новое поле
    println(mystruct.y)

}


Вопрос в том, как добавить новое поле к структуре? Через рефлексию можно добавить, но на выходе будет новый тип и в принципе это может быть и устроило, ведь ORM с одной табицы БД может прочитать данные в разные типы. Но как обновить изначальную таблицу БД, через прямые запросы из "плагина"? Как обращаться к этому новому типу из других модулей/плагинов, через interface{} (any) и потерять статическую проверку типов?

Для пользователя должно работать так:
Пользователь запускает ПО, на экране у него форма с полями. Заходит в меню плагинов и подключает нужный. На форме и в БД появляется новое поле. Т.е. никакого доступа к исходным кодам и компиляции из исходников.

Может есть примеры как это делается на других типизированных языках: C, Java, Kotlin, C# ?
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы