1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/daitougege-GinSkeleton

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
ReadMEBak.md 36 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 10.03.2025 01:28 ce825de

Это что?

  1. Это скелет веб-проекта, основанного на фреймворке Gin на языке Go, который сосредоточен на разделении клиентской и серверной части приложения. Цель состоит в том, чтобы четко выделить основные логические схемы проекта, а также обеспечить полную реализацию базовых компонентов, позволяя разработчику сосредоточиться на своей бизнес-логике.

  2. В этом проекте скелет уже включает все функции, связанные со таблицей tb_users (включая валидаторы входных данных для пользователя, регистрацию, получение токена, обновление токена, CRUD операции и проверку токена).

  3. Для использования этого проекта используйте версию ветки master, которая является самой последней и стабильной..

  4. С версии V1.4.00 требование к версии Go составляет >=1.15 для стабильной работы с решением Gorm v2 для разделения чтения и записи. Скачать Go 1.15 можно здесь: https://studygolang.com/dl.

Ответы на вопросы

  1. Для отправки вопросов используйте раздел Issues в верхней части проекта. Обычно вопросы рассматриваются ежедневно.

  2. Приоритетное внимание уделяется всем вопросам, представленным в репозитории Gitee Issues. GitHub может работать медленнее и негативно влиять на производительность.

Основная логическая схема проекта

Основная логическая схема### Быстрый старт

    1. Настройка окружения Go
// 1. Установите версию Go ≥1.15.

// 2. Настройте прокси для Go модулей, откройте терминал (cmd черный экран) и выполните следующие команды (Windows):
    // Для других систем обратитесь к документации: https://goproxy.cn
    go env -w GO111MODULE=on
    go env -w GOPROXY=https://goproxy.cn,direct

// 3. Скачайте зависимости проекта
    Откройте этот проект в Goland (версия ≥2019.3), перейдите в нижний терминал Goland и выполните команду go mod tidy для скачивания зависимостей проекта
    1. Выберите используемую базу данных для конфигурации```code // 1. База данных MySQL // MySQL является основной базой данных, восстановление осуществляется с помощью соответствующего клиента Найдите database/db_demo_mysql.sql и импортируйте его в базу данных,

// 2. База данных SQL Server 1. Найдите database/db_demo_sqlserver.sql, скопируйте содержимое и выполните его одновременно через соответствующий клиент, 2. В каталоге app/model, замените существующее содержимое файла users.go содержимым файла users_for_sqlserver.txt, 3. В файле config/gorm_v2.yml, измените значение UseDbType на sqlserver

// 3. База данных PostgreSQL 1. Используйте соответствующий клиент для создания базы данных db_goskeleton вручную, выберите эту базу данных. 2. Найдите database/db_demo_postgre.sql, скопируйте содержимое и выполните его одновременно через соответствующий клиент, 3. В каталоге app/model, замените существующее содержимое файла users.go содержимым файла users_for_postgres.txt, 4. В файле config/gorm_v2.yml, измените значение UseDbType на postgresql

// 4. После завершения одного из трёх вышеуказанных шагов, в файле config/gorm_v2.yml выберите тип вашей базы данных, настройте учётные данные пользователя, пароль и порт.


```code
// 1. База данных MySQL
    // MySQL является основной базой данных, восстановление осуществляется с помощью соответствующего клиента
    Найдите `database/db_demo_mysql.sql` и импортируйте его в базу данных,

  
// 2. База данных SQL Server
    1. Найдите `database/db_demo_sqlserver.sql`, скопируйте содержимое и выполните его одновременно через соответствующий клиент,
    2. В каталоге `app/model`, замените существующее содержимое файла `users.go` содержимым файла `users_for_sqlserver.txt`,
    3. В файле `config/gorm_v2.yml`, измените значение `UseDbType` на `sqlserver`
    

// 3. База данных PostgreSQL
    1. Используйте соответствующий клиент для создания базы данных `db_goskeleton` вручную, выберите эту базу данных.
    2. Найдите `database/db_demo_postgre.sql`, скопируйте содержимое и выполните его одновременно через соответствующий клиент,
    3. В каталоге `app/model`, замените существующее содержимое файла `users.go` содержимым файла `users_for_postgres.txt`,
    4. В файле `config/gorm_v2.yml`, измените значение `UseDbType` на `postgresql`
     
// 4. После завершения одного из трёх вышеуказанных шагов,
   в файле `config/gorm_v2.yml` выберите тип вашей базы данных, настройте учетные данные пользователя, пароль и порт.
    1. Запуск проекта
```// 1. Запуск проекта
Откройте этот проект в GoLand, в корневой директории обновите зависимости проекта вручную, выполнив команду: go mod tidy
Двойной клик по `cmd/(web|api|cli)/main.go`, войдите в кодовый интерфейс, найдите функцию `main` слева от неё, щелкните мышью по кнопке `run`, чтобы запустить. Кроме того, можно также использовать правый клик мыши по `run`.```

###    Описание структуры проекта   
>[Основная структура](./docs/project_struct.md)

###  Кросс-компиляция (непосредственный сбор Linux исполняемых файлов на Windows)    
```code  
  // В окне терминала GoLand выполните следующие команды, чтобы установить параметры перед компиляцией
  
  // Обратите внимание: при выполнении этих трёх команд не должно быть пробелов до и после, иначе последняя компиляция может завершиться ошибкой, и вы не получите исполняемые файлы.
  # При использовании ключа `-w` значение будет записано в переменную окружения, если его не указывать каждый раз, то он будет временно применяться.
  # Для программ, работающих на серверах Linux, повторное установление этих параметров перед компиляцией не требуется. Если программа будет работать на Windows, то параметр компиляции будет `GOOS=windows`.
  go env -w GOARCH=amd64  // архитектура процессора
  go env -w GOOS=linux  // система, на которой будет выполняться программа, Linux, Windows, Darwin (система MacOS Apple)
  go env -w CGO_ENABLED=0   // закрытие модуля Cgo для сборки на Windows, так как разработка с использованием Cgo на Windows слишком сложна. Если используется библиотека Cgo, то рекомендуется разрабатывать и собирать её на Linux.
```  // Создание исполняемого файла, переход в корневую директорию (GinSkeleton находится в этой директории, это и есть директория с go.mod)
  // При сборке рекомендуется добавить параметры: -ldflags "-w -s", где `-w` означает удаление отладочной информации и запрет использования gdb, а `-s` — удаление таблицы символов (таблица символов используется для адресации символов во время линковки, она не требуется после статической сборки).
  // После добавления этих параметров размер программы уменьшится примерно на 25%.
  // Из трёх каталогов `web`, `api`, `cli` выберите один, который будет входной точкой сборки.
  go build -o demo_goskeleton -ldflags "-w -s" cmd/(web|api|cli)/main.go```markdown

###    <font color="red">Основные логики проекта</font>
> Эта часть основана на `процессе инициализации проекта`, `маршрутах`, `валидаторах формы`, `контроллерах`, `моделях`, `сервисах` и `WebSocket` как основной логики проекта.  
[Перейти к документации основных логик](docs/document.md)
```### Логика тестовых маршрутов
[Перейти к документации тестовых маршрутов API](docs/api_doc.md)

### Взаимодействие с часто используемыми модулями
> По мере развития проекта список следующих модулей будет расширяться. Несмотря на то, что количество модулей может показаться большим, вам потребуется выбрать лишь те, которые необходимы для вашего основного потока работы. Умение использовать основной логический поток вместе с этими модулями сделает работу всего проекта более плавной и простой.

| Номер | Функциональный модуль | Документация |
| --- | --- | --- |
| 1 | Глобальные переменные (логи, GORM, конфигурационный модуль, алгоритм Snowflake) | [Перечень](docs/global_variable.md) |
| 2 | Синтаксис валидатора формы | [validator](docs/validator.md) |
| 3 | Комплексная отправка параметров формы | [Документация по комплексной отправке параметров формы](docs/formparams.md) |
| 4 | Очереди сообщений | [Документация RabbitMQ](docs/rabbitmq.md) |
| 5 | Клиентские команды CLI | [Документация Cobra](docs/cobra.md) |
| 6 | goCurl, httpClient | [Клиент httpClient](https://gitee.com/daitougege/goCurl) |
| 7 | [Клиент WebSocket JS](docs/ws_js_client.md) | [Сервер WebSocket](./docs/websocket.md) |
| 8 | Программирование с использованием AOP | [Программирование с использованием AOP](docs/aop.md) |
| 9 | Redis | [Пример использования Redis](test/redis_test.go) |
| 10 | CRUD операции с использованием GORM_v2 | [Эксклюзивные CRUD операции с использованием GORM + Ginskeleton](docs/concise.md) || 11 | Операции с использованием GORM_v2 (MySQL, SQL Server, PostgreSQL) | [Более тестовых примеров с использованием GORM v2](test/gormv2_test.go) |
 | 12 | Операции с множественными источниками данных | [Операции одновременного соединения с несколькими серверами MySQL, SQL Server, PostgreSQL](docs/many_db_operate.md) |
 | 13 | Преобразование результатов запроса SQL в древовидную структуру с помощью функций Scan и Find GORM_v2 | [Отражательный сканнер преобразования результатов SQL в древовидную структуру](https://gitee.com/daitougege/sql_res_to_tree) |
 | 14 | Логирование | [Высокоэффективное логирование Zap](docs/zap_log.md) |
 | 15 | Верхнеуровневое решение для проекта ELK | [Рекомендованная версия ELK 7.13.3](https://gitee.com/daitougege/elk-docker-compose) <br/> <s>[Старая версия ELK 7.9.1](docs/elk_log.md)</s> |
 | 16 | Валидаторы CAPTCHA и промежуточного слоя CAPTCHA | [Подробное руководство по использованию CAPTCHA](docs/captcha.md) |
 | 17 | Настройка Nginx (HTTPS, балансировка нагрузки) | [Подробное руководство по настройке Nginx](docs/nginx.md) |
 | 18 | Разделение основного потока | [Разделение валидатора и контроллера](docs/low_coupling.md) |
 | 19 | Управление доступом к API с использованием Casbin | [Представление Casbin](docs/casbin.md) |
 | 20 | Синхронизация главного и вторичного сервера MySQL (для реализации разделения чтения и записи) | [Быстрый запуск с использованием Docker Compose](https://gitee.com/daitougege/mysql-master-slave-docker-compose) |### Схема развертывания проекта
| Номер | Метод развертывания | Документация |
| --- | --- | --- |
| 1 | Окружение разработки и отладки | [Наиболее простой метод nohup](docs/deploy_nohup.md) |
| 2 | Производственная среда - надежная защита процессов Supervisor | [Надежная схема защиты процессов Supervisor](docs/supervisor.md) |
| 3 | Производственная среда - схема развертывания с использованием Docker | [Надежная схема развертывания с использованием Docker, позволяющая легко возвращаться к предыдущей версии и масштабировать](docs/deploy_docker.md) |

### Схема эксплуатации после запуска проекта (на основе Docker)
| Номер | Модуль эксплуатации | Документация |
| --- | --- | --- |
| 1 | Linux-сервер | [Мониторинг производительности](http://gitee.com/daitougege/grafana-prometheus-nodeexpoter) <br/> <s>[Старая версия](docs/deploy_linux.md)</s> |

### Конкурентное тестирование
[Подробнее здесь](docs/bench_cpu_memory.md)

### Отчет о производительности
> 1. Начиная с этапа разработки, наша цель заключалась в достижении максимальной производительности. Поэтому, когда общие функции проекта становятся все более совершенными, мы проводим всесторонний анализ производительности.  
> 2. Выполняя соответствующий код, отслеживаем время работы процессора и использование памяти для анализа производительности различных компонентов. Чем меньше время работы процессора и использование памяти, тем лучше производительность; наоборот — хуже.#### Анализ производительности через время работы процессора
Номер| Объект анализа | Адрес документа  
----|----------------|-----------------
1| Основная логика проекта|[Отчет об основной логике](./docs/project_analysis_1.md)
2| Код взаимодействия с базой данных|[Отчет о коде взаимодействия с базой данных](./docs/project_analysis_2.md)

#### Анализ производительности через использование памяти
Номер| Объект анализа | Адрес документа  
----|----------------|-----------------
1| Код взаимодействия с базой данных|[Отчет о коде взаимодействия с базой данных](./docs/project_analysis_3.md) 

### <font color='red'>Часто задаваемые вопросы</font>
[Подробнее здесь](./docs/faq.md)  

## GinSkeleton-Admin административная система
> 1. Эта система была создана как корпоративная административная система на основе GinSkeleton(v1.5.10) + Iview(v4.5.0).  
> 2. Онлайн-демонстрация системы имеет ограниченные права на редактирование и удаление данных по сравнению с версией для локальной установки.  
![Пример страницы](https://www.ginskeleton.com/images/home_page1.png)  

### [Онлайн-демонстрационная система: GinSkeleton-Admin](http://139.196.101.31:20202/)
### [Репозиторий backend admin](https://gitee.com/daitougege/gin-skeleton-admin-backend)
### [Репозиторий frontend admin](https://gitee.com/daitougege/gin-skeleton-admin-frontend)

#### Журнал обновлений основной версии#### Версия 1.5.30 2021-11-28
* Добавлено  
    1. Введен глобальный автоматический переводчик для проверки параметров формы, что упрощает написание кода и повышает эффективность разработки.
* Обновлено  
    1. По рекомендациям официального сайта Gin, при переходе программы в режим работы в production, маршруты Gin были переопределены, а middleware для восстановления ошибок был перезаписан. При использовании режима release после конкурентного тестирования достигается увеличение производительности на 5%.
    1.1 Когда ключ `AppDebug` в конфигурационном файле (config/config.yml) установлен значением `false`, маршруты Gin по умолчанию используют режим `release`, и не записывают журналы доступа к интерфейсу. Для среды производства рекомендуется использовать прокси Nginx, который также позволяет легко реализовать балансировку нагрузки.
    2. Другие обновления включают небольшие изменения в документах и комментариях к программе.
#### Версия 1.5.29 2021-11-15
* Добавлено  
    1. Документация по работе с множеством источников баз данных.
    2. Поддержка автоматического присвоения полей `created_at` и `updated_at` при выполнении команд работы с базой данных в режиме `cli`.
    3. В модуле `utils` уровня доступа к `gorm v2` добавлена проверка аргументов функции `Create`, чтобы избежать ошибки `panic`, когда тип аргумента не является указателем. Официальная библиотека GORM не выполняет эту проверку.
    4.В модуле `utils` уровня доступа к `gorm v2` добавлена проверка аргументов функций `Save` и `Update`, чтобы обеспечить работу всех обратных вызовов GORM.
     5. Для полноценной поддержки функции 4, рекомендуется передавать указатели как аргументы функций `Create`, `Save` и `Update`. При слиянии старых проектов с новыми версиями `ginskeleton`, необходимо заменить аргументы функций `Save` и `Update` на указатели.* Обновлено  
    1. Исправление ошибок в написании слов в контроллере CAPTCHA.  
    2. Обновление некоторых комментариев в маршрутах.  
    3. Обновление всех зависимостей до последней версии, а также обновление логов уровня доступа (utils) связанных с пакетом GORM.

#### В 1.5.28  2021-10-07
* Обновлено  
  1. Добавлен пример обработки сложных параметров формы, а также другие улучшения в документации.  
  2. Устранение проблемы удаления символьных ссылок в директории `public` при запуске проекта на Linux, если они были скопированы из окружения Windows.  
  3. Логика обновления токена разделена от других маршрутов.

* Устранены уязвимости:  
  1. Версии `≤ V1.5.24` содержали риск обхода аутентификации токенами, специально созданными злоумышленниками. Рекомендуется немедленно обновиться до последней версии.  
  1.1 Метод обновления: замените файл `auth.go` в папке `app/http/middleware/authorization` на новый файл из последней версии.

#### В 1.5.27  2021-09-18  
* Обновлено  
  1. Аргументы функций работы с базой данных в файле `users.go` были изменены с типа `float64` на `int`, чтобы избежать путаницы для разработчиков.

#### В 1.5.26  2021-09-13  
* Обновлено  
  1. Упрощено объединение кода.

#### В 1.5.25  2021-09-13
* Добавлено  
  1. Пример простого использования режима командной строки `cli`, что поможет новым пользователям быстро начать работу, расположение примера: ./command/demo_simple/.* Обновлено  
  1. Расширены временные рамки для обновления просроченного токена, чтобы облегчить получение нового токена.  
  2. Уточнены параметры компиляции для кросс-платформенной компиляции.  

#### Версия 1.5.24  2021-09-03

* Исправлено  
  1. Логика графического CAPTCHA: если используется не встроенный в систему middleware для CAPTCHA, а вызывается напрямую часть кода с логикой проверки, то постоянно отображается сообщение о том, что CAPTCHA не получен.  

* Обновлено  
  1. Добавлена документация по параметрам компиляции.  
  2. Улучшено описание использования WebSocket.  
  3. При запуске проекта на машинах с установленной программой 360 возникают проблемы, добавлено сообщение о причине.

#### Версия 1.5.23  2021-08-06

* Исправлено  
  1. Исправлена ошибка в файле `app/model/users_for_postgres.txt`, после входа в систему при увеличении количества входов SQL-запрос выдает ошибку.  

* Обновлено  
  1. Отправлена pull request для зависимости `http://github.com/casbin/gorm-adapter`. Поскольку официальная версия была обновлена, данная зависимость также обновлена до последней версии, что решило проблему с ошибками при создании индекса в PostgreSQL.#### В 1.5.22  2021-08-04
* Добавлено  
    1. Примеры деплоя проекта.  
    2. Быстрое деплои MySQL master-slave синхронизации.  
    3. Добавлены часто используемые функции преобразования результатов выполнения Redis.  
    4. Добавлен пример базы данных PostgreSQL; теперь основная версия полностью поддерживает MySQL, SQL Server и PostgreSQL.  
* Обновлено  
  1. Все зависимости проекта обновлены до последних версий.    
  2. Документация проекта.#### В 1.5.21  2021-07-16  
* Обновлено  
  1. Все зависимости проекта обновлены до последних версий.   
  2. Интеграция проекта с ELK системой логирования, добавлен скрипт быстрого деплоя среды Docker Compose, подробнее см. раздел "Часто используемые модули", пункт 13.      
  3. Добавлена документация по деплою проекта.      

#### В 1.5.20  2021-06-18
* Обновлено  
  1. Примеры кода для валидатора параметров формы обновлены, предоставлены более компактные примеры кода, связанные документы также обновлены.    
  2. Ограничение максимального количества одновременно активных токенов для одного пользователя, при запросах сортировка производится по полю `expires_at` в порядке убывания, чтобы обеспечить, что долгоживущие токены не будут отключаться.  
  3. Примеры команд CLI перестроены по подкаталогам, что позволяет более удобно организовать большое количество команд.  
  4. Улучшена документация по деплою Nginx, статические ресурсы перехватываются Nginx, что повышает скорость ответа, позволяя Go-приложению сосредоточиться на обработке API-запросов.  
  5. Поле `last_login_ip` в скрипте создания базы данных MySQL по умолчанию установлено как пустая строка.#### В 1.5.17  2021-06-06
* Добавлено, обновлено  
    1. Модели пользователей для SQL Server, см. файл `app/model/users_for_sqlserver.txt`.  
    2. Обновлены команды создания базы данных и таблиц в файле `database/db_demo_sqlserver.sql`.
* Исправлено  
    1. Исправлено написание слова "date" в константах.#### В 1.5.16  2021-05-28
* Добавлено  
    1. Добавлена капча-middleware с примерами использования.#### Версия 1.5.15  2021-05-11
* Улучшено  
  1. После загрузки файла автоматическое создание директорий теперь использует права доступа `os.ModePerm` вместо `(0666)`, что решает возможные проблемы с правами доступа.  
  2. В документацию `cobra` добавлен пример создания подкоманд.  

#### Версия 1.5.14  2021-04-28
* Улучшено  
  1. Обновлены разделы `rabbitMQ`.  
  2. Обновлены разделы `websocket`.

#### Версия 1.5.13  2021-04-27
* Улучшено  
  1. Разделение регистрационного файла валидатора формы на `api` и `web`, чтобы при больших проектах логика была более понятной и компактной.  
  2. Устранены детали, связанные с ограничением `mysql` функции `FROM_UNIXTIME` до 2 миллиардов.  
  3. Обновлены основные зависимости до последней версии.

#### Версия 1.5.12  2021-04-20
* Улучшено  
  1. В `app/model/users` добавлены комментарии, особенно для операций с базой данных, выполненных через native SQL. Комментарии также содержат ссылки на использование `gorm_v2` для работы с базой данных.  
  2. Все параметры `limit` и `offset` в синтаксисе пагинации (`limit offset`, `limit`) были унифицированы как `int`, что решает проблему неподдерживаемых `float` типов в `MySQL 8.x`.#### Версия 1.5.11  2021-04-02
* Изменено  
    1. В файле `app/model/BaseModel` функция `UseDbConn` переименована, первая буква сделана прописной, чтобы было удобнее создавать подкаталоги.  
* Обновлено  
    1. Интеграция логов Nginx `access.log` с ELK системой управления логами, добавлены возможности преобразования IP в географические координаты для отображения распределения пользователей на карте мира.  
    2. Добавлены [иллюстрации](docs/elk_log.md) для демонстрации конечного результата.  

#### Версия 1.5.10  2021-03-23
* Улучшено  
  1. После завершения валидации параметров формы `form`, автоматически привязываются три ключа к контексту: `created_at`, `updated_at`, `deleted_at`, значения которых равны дате и времени запроса.  
  2. В `BaseModel` тип данных полей `created_at` и `updated_at` изменён на `string` для удобства автоматической привязки значений из контекста к соответствующим ключам модели.  
  3. При каждом входе пользователя значение поля количества входов в таблице `tb_users` увеличивается на единицу.  
  4. Исправлена ошибка отсутствия одинарной кавычки в документации по установке Nginx.  
  5. Обновлено руководство по работе с базой данных с использованием GORM.  
  6. Удалены небольшие части кода, не относящиеся к делу.  
  7. Добавлена возможность автоматического создания соединений для лучшей работы с статическими ресурсами.  
  8. Добавлены некоторые параметры конфигурации для кода загрузки файлов, а также обновлен сам код.  
  9. Система `GinSkeleton-Admin` была выпущена вместе.#### В 1.5.00  2021-03-10
* Добавлено  
  1. Для предстоящей системы GinSkeleton-Admin были добавлены основные модули поддержки: модуль casbin, документация по работе с базой данных gorm_v2, см. список **Основные разработочные модули**.   
  2. Константы, используемые в модуле token, перемещены в файл конфигурации.  
  3. Переименованы middleware для проверки токена и casbin.  
  4. Основной версионный выпуск этого обновления не слишком велик, будущие основные выпуски будут продолжать оставаться простыми, новые функциональные модули будут добавляться как пакеты.  
  5. Больше корпоративных функций будет представлено в последующих версиях GinSkeleton-Admin, следите за проектом и предоставляйте обратную связь по его использованию.  

## Версия V 1.1.xx - 1.4.xx журнала версий  
> 1.[Исторический журнал](docs/history_log.md)

### Благодарность компании JetBrains за предоставленные активационные ключи для проекта GoLand
![](https://www.ginskeleton.com/images/jetbrains.jpg)

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/daitougege-GinSkeleton.git
git@api.gitlife.ru:oschina-mirror/daitougege-GinSkeleton.git
oschina-mirror
daitougege-GinSkeleton
daitougege-GinSkeleton
master