Comments 10
Нужно просто добавить атрибуты или аннотации, два разных названия одного и того же. По сути атрибуты - это лишь константные данные для инициализации "атрибутных" объектов произвольных типов (в классическом ООП это то что передается в конструктор объекта, в Go пусть будет то что нужно для инициализации структуры конкретного типа - разницы нет). Существующие теги структур в этом случае становятся частным случаем - данными для инициализации объекта типа string.
Если честно, не очень из коммента понял, как вы видите аннотации/атрибуты в го. Можно пример каким нибудь псевдокодом?
Как аннотации/атрибуты в тех языках где они есть. Если уж в Go принято писать теги после типа переменной, то так и надо оставить, просто кроме собственно строк разрешить писать там инициализаторы структурных объектов.
можно через пробел:
type Oops struct {
Text string `json:text` Author{name:"Jonh", age:30} Serializable{} Version{2}
}можно через запятую:
type Oops struct {
Text string `json:text`, Author{name:"Jonh", age:30}, Serializable{}, Version{2}
}К сожалению синтаксис Go в целом заточен именно на аннотирование полей, т.е. его напрямую не прикрутить к аннотированию других языковых конструкций - типов, функций и т.д. Но это тоже решается, пусть даже введением нового ключевого слова.
Нууу, вариант из пропозала, выглядит симпатичнее, не требует таких изменений в reflect и ast + честно говоря, я не понимаю смысл инициализиторов как таковых - это решается конструкторами, зачем два способа делать одно и то же
Может быть пора отпукстить пхп, джаву горм в могилу и перестать тащить ненужные в го идеи - и использовать теги для того для чего они были созданы = перегрузка имени поля? Мне искренне жаль что в теги лезет все что угодно.
Ну по поводу ORM, соглашусь плностью. Мне кажется люди приходят с других языков и такие, хм а где ту орм? надо написать.
По поводу тегов ну их уже используют, кто как кому не лень, ну и во многих вещах(например форматы кодирования) определенно есть смысл - типизированные теги, хотя бы навели некоторый порядок
С тегами итак всё хорошо, не надо их трогать.
Можно сделать "стандартизацию" тегов чтоб было у всех похоже
Можно сделать проверку синтаксиса тегов, только не линтерами, а каждая внешняя библиотека сама будет описывать список своих тегов.
Чем мне нравится Go, так это взрослым подходом свойственным профессионалам. Это не Rust какой-нибудь, где авторы выглядят как способные, может быть даже талантливые, дети. Как пример - дженерики. 12 лет их не было потому, что было не понятно как их сделать нормально. Такой же подход был, отчасти и есть, у Эппл. Например, если нет достойного iOS калькулятора - значит в iOS калькулятора не будет.
О тегах начну с предполагаемых причин. Кому-то было неудобно парсить JSON и он придумал теги - из шкурных интересов решил нагадить всем. Как называется такая личность? Правильно, сволочь она называется.
Почему нагадить? Потому, что это значит городить второй язык поверх Go. Вот с этим делом и проблемы, дотпространств имён докатились. Это безумие, как бы кому ни казалось что лично ему профит выйдет.
Почему сейчас не ужас? А упомянутый выше профессионализм (пока) спас, думается мне. Тэги как они есть - не мешают никому, ну есть и есть. Более того, чтобы узнать, есть ли от них польза, другого способа чем попробывать - нету. Попробывали, есть польза, вот JSON парсить приспособили - теперь лучше понимаем как его парсить, положительный результат достигнут.
Но нармально парсить через теги - безумие, структура сама по себе, парсер сам по себе, смешение понятий - детский сад. По предложениям стандартизировать теги видно - чего хочется достичь понятно. Ещё раз - в том числе потому понятно, что с тэгами поиграли, спасибо им. Но рабочий механизм будьте добры реализовать в другом месте.
И ещё раз, для верности. Стандартизация и прочая дурь вокруг тегов а) смешивает концепты и б) мешает другим способом использовать тэги чтобы разобраться ещё с чем нибудь ограничивая свободу их использования.
Пример аналогичного этим предложениям, как по мне весьма, безумия из Rust - времена жизни в определении процедуры. Процедура не может интересоваться временами жизни что параметров, что возвращаемого значения - это автономная сущность. Если нужно обязательно делать ещё одну проверку не дождавшись пока компилятор поумнеет достаточно для того, чтобы её можно было реализовать нормально - пишите свои времена жизни там, где они не выглядят творением школьного кружка, при вызове функции, например. Или при объявлении переменной...
Премного я опечалился сию статью прочитав. Линуса на вас нет...
Теги структур — худшее что есть в go