Это инструмент, написанный на Go, который используется в процессе разработки для создания унифицированных констант и модельного кода для различных платформ.
Инструмент использует формат Json в качестве универсального формата, а затем преобразует его в файлы для разных языков. После каждого изменения файла Json достаточно просто перегенерировать код, чтобы получить обновлённые версии серверного и клиентского кода.
В настоящее время поддерживаются следующие целевые языки:
В каталоге example/origin есть два примера каталогов: constant — каталог с исходными файлами констант, model — каталог с файлами моделей.
После запуска make test в каталоге dist генерируются коды на Go и TypeScript.
Подробности процесса сборки можно найти в файле Makefile.
Команда установки:
go get -u gitee.com/xiaochengtech/unified-structure
Исполняемый файл находится по адресу $GOPATH/bin/unified-structure, параметры следующие:
Название | Обязательный | Описание |
---|---|---|
-src [SRC_DIR] | Да | Путь к исходным файлам, включая файлы Json и другие типы файлов |
-dest [DEST_DIR] | Да | Целевой путь, где будут созданы соответствующие файлы для целевого языка, а также некоторые поддерживаемые типы файлов, скопированные из исходного пути |
-language [LANGUAGE] | Да | Целевой язык, в настоящее время поддерживается go и ts (TypeScript) |
Исходный путь должен содержать файл index.json, который служит для объявления некоторой информации на уровне пакета. Другие файлы Json представляют собой отдельные модули. Если есть файлы, отличные от Json, они выборочно копируются в целевой путь в зависимости от выбранного языка.
Полный формат:
{
"mode": "(обязательное) режим каталога, константы (constant) или модели (model)",
"ext-go": {
"copy-ext": [],
"package-name": "имя пакета Go"
},
"ext-ts": {
"copy-ext": []
}
}
Здесь ext-xxx — это дополнительная конфигурация для разных языков, которую можно заполнить по желанию. copy-ext — список расширений файлов, которые можно скопировать.
На данный момент поддерживается только режим, когда весь каталог состоит из констант или моделей. Смешанный режим не поддерживается.
Независимо от того, являются ли данные константами или моделями, формат следующий:
{
"name": "(обязательно) имя модуля, должно начинаться с заглавной буквы в Go",
"comment": "(необязательно) комментарий на уровне файла",
"language": "(обязательно) список поддерживаемых языков экспорта",
"vartype": "единый тип переменной, IOTA обязателен, остальные необязательны, приоритет ниже, чем у поля type",
"iota": {
"enable": "включено ли, по умолчанию false, применяется ко всему iota",
"offset": "смещение"
},
"list": [],
"ext-go": {
"gorm-table-name": "название таблицы в режиме GORM базы данных",
"import-pkgs": "список пакетов импорта, массив строк",
"enable-set": "функция получения метки label экспортируется"
},
"ext-ts": {
"enable-set": "метка label экспортируется как набор"
}
}
Здесь объект iota является необязательным и действует только в режиме констант. Он представляет собой специфический режим увеличения чисел IOTA, как описано в синтаксисе Go.
list — это список констант или полей, элементы массива соответствуют формату ниже.
Формат полей для констант или моделей также унифицирован:
{
"name": "(обязательно) имя переменной",
"type": "(необязательно) тип переменной",
"json": "(обязательно) имя поля Json",
"label": "(необязательно) соответствующее отображаемое содержимое",
"comment": "(необязательно) комментарий",
"value": "(режим констант) значение переменной",
"refer": {
"name": "имя объекта ссылки",
"file": "имя файла объекта ссылки"
},
"ext-go": {
"gorm": "свойство GORM"
},
"ext-ts": {}
}
refer — информация о поле расширения (extend).
Список поддерживаемых типов полей см. в src/common/vartype.go.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )