Чтот у вас запутанное с алиасами и префиксами. Со вторым вообще проблема, как правило это делается по-другому. И соответственно метод getArtist неправильно обрабатывает, в условии нужно указать префиксы, наверно...не уверен. Но если делать как полагается, то такого быть не должно.
В Go нет классового наследования. Ваше *A в структуре B это обычное поле, прост без имени и вызов x.Print() на самом деле выглядит так x.A.Print(). То, что вам нужно делается с помощью рефлексии, это не "Go-way" и вам бы сменить язык или мышление ;)
Хорошие мысли, интересное направление, сам давно хочу что-то подобное сделать. Комент без смысловой нагрузки, просто хочу морально поддержать ) Если руки дойдут, оставьте на гитхаб что получится, единомышленников найти просто и вместе всегда веселее.
>>"Но потом в C&U добавился обработчик, который изменял данные на frontend, которые с формой потом попадали в базу."
Какой обработчик? Как вы данные на фронте меняете? Редактируете фронт-файлы??
С Sharp: >>Event[name](ps) Что будет, если еще не занесен в словарь кэллбэк? Исключение? Нужна проверка.
В Go нет исключений, нужно что-то типа:
f, err := Event[name]
И обработать err.
Язык другой, совсем. Шарп очень хорош, но далеко от окон не уйти, как бы не старались - все эти порты на другие платформы - это серьёзные, но, игрушки.
Олег Матрозов: Вы - динозавр, батюшка. В краце:
где-то далеко в просторах кода - throw *Аларм, пишите меня в лог*
где-то ближе к вам - catch(ex) -> log(ex) // ex == *Аларм, пишите меня в лог*
P.S. В вашем примере вообще нет ошибок, которые надо выкидывать, только пишем в лог если что-то не то и всё.
Владимир Грабко: ну да, или мьютексы или каналы, но, конечно, вопрос в том - "нужно это или нет?". Если у вас все подписи на события будут в init() методах, то оно и не надо, а если динамически (т.е. в любом методе если это web-сервис), то потокобезопасность обязательна.